c# - 如何从 json 序列化 protobuf,并自动忽略 C# 中的未知字段?

标签 c# json serialization protocol-buffers proto3

例如,我有一个这样的原型(prototype):

message ProtoType
{
    string field1 = 1;
    strin field2 = 2;
}

我有一个从该原型(prototype)的较新版本反序列化的 json:

{
  "field1": "111",
  "field2": "222",
  "testField": "test"
}

我用它来从 json 序列化 protobuf:

JsonParser.Default.Parse<ProtoType>(protojson);

但是,如果我的 json 有一些 proto 中不存在的字段(如下面的 testField),它将抛出异常:

InvalidProtocolBufferException: Unknown field: testField

我想知道是否有办法获取可以自动忽略未知字段的 ProtoType 实例。

非常感谢!

最佳答案

您将需要使用类JsonParser.Setting并使用函数WithIgnoreUnknownFields。所以你会得到这样的东西:

var settings = JsonParser.Settings.Default.WithIgnoreUnknownFields(true);
var t = new JsonParser(settings).Parse<Test.ProtoType>(protojson);

此外,文档似乎没有涵盖这一点。我建议您检查JsonParser source code并搜索 Settings 类以获取您可以使用的所有功能。

编辑

为了完整起见,有一个 copy of the C# documentation由 Google 云团队管理,并且此版本是最新的。

关于c# - 如何从 json 序列化 protobuf,并自动忽略 C# 中的未知字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75318533/

相关文章:

c# - 在 C# 类库项目中使用(合并)资源字典

c# - 在 Windows 8(C++ 或 .NET/C#)中的 WinRT 上动态执行代码?

c# - 使用 C# 属性处理异常

Java - Jackson JSON 库和 ObjectMapper.readValue

java - J2ME序列化

c# - 在没有实际文件的情况下使用 FileStream

javascript - 将 JSON 对象连接到数组中

javascript - 无法访问json数据

c++ - 如何在不使用 iostream 的情况下构建 Google protobuf?

java - 间隔树实现在序列化后占用大量文件空间