【问题标题】:Use protobuf-net to convert json into object使用 protobuf-net 将 json 转换为 object
【发布时间】:2018-04-12 08:23:50
【问题描述】:

我得到了一个通过 protogen 生成的 c# 类。

我有一个 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”生成的类对象。

【问题讨论】:

  • 如果您有一个 JSON 和对象模型(class 等)的具体示例,您正在努力解决,它会更容易作为答案的具体例子
  • 重新编辑:这不是有效的 JSON;并且查看要映射到的对象模型会非常有用

标签: c# json protobuf-net protogen


【解决方案1】:

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# 代码(或您选择的任何自动映射工具)在两种表示之间进行映射。

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

【讨论】:

    猜你喜欢
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    • 2019-05-08
    • 1970-01-01
    • 2020-04-19
    • 2015-06-24
    • 2020-08-18
    相关资源
    最近更新 更多