您的位置:首页 > Web前端

Protocol Buffer-net初探--最简单的Protobuf-net应用

2018-01-16 10:02 399 查看
Protocol Buffers是一种独立于语言和平台,可扩展的序列化结构数据格式,主要用于数据存储和RPC数据交换格式。目前google提供了C++、Java、Python 三种语言的 API;包含一个Protocol Buffers编译器和一个Protocol Buffers使用的类库。

Protobuf-net官方站点:https://code.google.com/archive/p/protobuf-net

我提供的下载地址:http://download.csdn.net/download/fangjingj/10207541

Protobuf-net是第三方中最强大应用最广泛的一个,支持.Net、C#、WCF、VB

网上的示例是真的多,不过一般都很长,写了半天,核心就是两句话。。。。。。

直接贴代码:读JSON并压缩

namespace Writer
{
[ProtoContract]
public class Coordinate
{
[ProtoMember(1)]
public float lon;
[ProtoMember(2)]
public float lat;
}

[ProtoContract]
public class MyData
{
[ProtoMember(1)]
public int Id;
[ProtoMember(2)]
public Coordinate position;
[ProtoMember(3)]
public float value;
[ProtoMember(4)]
public float angle;
}

class Program
{
static void Main(string[] args)
{
List<MyData> data = readJsonFile("test.json");
using (var file = System.IO.File.Create("test.bin"))
{
ProtoBuf.Serializer.Serialize(file, data);
}
}
}
}




首先将Json文件读到列表数组中,具体读的方法如下:
private static List<MyData> readJsonFile(string path)
{
List<MyData> listData = new List<MyData>();

StreamReader jsonFileStreamReader = new StreamReader(path, Encoding.Default);
String jsonStr = jsonFileStreamReader.ReadToEnd();

JObject jsonJobj = (JObject)JsonConvert.DeserializeObject(jsonStr);

JArray featureJarray = (JArray)jsonJobj["features"];

int dataId = 0;

foreach (var item in featureJarray)
{
MyData data = new MyData();

data.Id = dataId;
dataId++;
JObject featureJobj = (JObject)item;
JArray coordinateJarray = (JArray)featureJobj["geometry"]["coordinates"];

Coordinate coor = new Coordinate();
coor.lon = float.Parse(coordinateJarray[0].ToString());
coor.lat = float.Parse(coordinateJarray[1].ToString());

data.position = coor;
data.value = float.Parse(featureJobj["properties"]["value"].ToString());
data.angle = float.Parse(featureJobj["properties"]["angle"].ToString());
listData.Add(data);
}
return listData;
}

此处用到Newtonsoft.Json.dll

下载地址:http://download.csdn.net/download/fangjingj/10207577

将压缩后的数据反序列化出来

namespace Reader
{
[ProtoContract]
public class Coordinate
{
[ProtoMember(1)]
public float lon;
[ProtoMember(2)]
public float lat;
}

[ProtoContract]
public class MyData
{
[ProtoMember(1)]
public int Id;
[ProtoMember(2)]
public Coordinate position;
[ProtoMember(3)]
public float value;
[ProtoMember(4)]
public float angle;
}

class Program
{
static void Main(string[] args)
{
List<MyData> binData = null;
        using (var file = System.IO.File.OpenRead("test.bin"))
        {
            binData = ProtoBuf.Serializer.Deserialize<List<MyData>>(file);
        }
}
}
}

DEMO下载地址:http://download.csdn.net/download/fangjingj/10207596
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: