1

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

我有一个 json 响应,我想将其转换为对象(映射到从 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”,它具有intstring属性以及“ class ”类型的属性。

我想将此 Json 转换为“protogen”生成的类对象。

4

1 回答 1

0

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

目前尚不清楚“json”是指“通用 JSON,与 ProtoBuf 无关”,还是指“在 3.0 左右添加的 Protocol Buffers JSON 格式”。

如果您的意思是通用 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# 代码(或您选择的任何自动映射器工具)在两个表示之间进行映射。

您有时可以与序列化程序库抗争,使其与与数据形状不匹配的对象模型一起工作,但根据我的经验,这是对时间的错误利用,并导致代码脆弱、错误。

于 2018-04-12T08:31:20.383 回答