使用protobuf-net将json转换为对象

时间:2018-04-12 08:23:51

标签: c# json protobuf-net protogen

我已经获得了通过protogen生成的c#类。

我有一个json响应,我想将其转换为object(映射到protogen生成的类)。

我怎样才能做到这一点? 我拥有的Json就像:

    Test {Id:"0000001" InsertDateTime:"4/12/2018 01:01:01" ModifyDateTime:"4/12/2018 01:05:10" ParentId:"0000001"
Sample{Id:"0000002" InsertDateTime:"4/12/2018 01:01:01" ModifyDateTime:"4/12/2018 01:05:10"}
}

主要类名称为“Test”,它具有 int string 属性以及类型为“ class ”的属性。

我想将这个Json转换为'protogen'生成的类对象。

1 个答案:

答案 0 :(得分:0)

protobuf-net仅实现二进制协议缓冲区(ProtoBuf)规范。

目前还不清楚“json”是指“通用JSON,与ProtoBuf无关”,还是指“协议缓冲JSON格式在3.0左右添加”。

如果你的意思是通用JSON:那么通常几乎任何JSON序列化器都可以正常工作 - Json.NET是一个很好的默认设置,但是存在其他JSON序列化器。这是因为protobuf-net尝试使用惯用的.NET对象,这意味着它可以与使用惯用的.NET对象的其他工具很好地协作。

如果您指的是特定于ProtoBuf的JSON,那么我建议使用Google的官方C#ProtoBuf库来实现这一点。我根本没有需要或没有时间在protobuf-net中添加对此的支持,到目前为止添加它对我来说是一个非常低优先级 - 我根本没有看到有人要求它来自我。

如果你有通用的JSON,但JSON布局与你的protobuf模型不同,那么坦率地说我会推荐两个DTO模型:

  • 旨在使用您的JSON数据和您选择的JSON序列化程序(例如Json.NET)的文件
  • 设计用于处理ProtoBuf数据和您选择的ProtoBuf序列化程序(例如protobuf-net)

并使用常规C#代码(或您选择的任何自动映射工具)简单地在两个表示之间进行映射。

可以有时打击一个序列化程序库,让它与一个与数据形状不匹配的对象模型一起工作,但根据我的经验,这是一个糟糕的时间使用并导致脆弱的,错误的代码。