【问题标题】:How to create C# class code from dynamic object?如何从动态对象创建 C# 类代码?
【发布时间】:2023-03-09 10:35:01
【问题描述】:

有人向我发送 JSON。每次都有相同的格式。可以使用var dyn = JsonConvert.DeserializeObject<dynamic>(rawJson); 将其反序列化为动态对象。文档对我当前的版本或 JSON 提供程序不利,而我希望对我获得的所有字段进行代码高亮显示。

如何从动态对象中获取 C# 类代码,以便我可以反序列化为生成的类型,而不是使用 var oldschool = JsonConvert.DeserializeObject<GeneratedTypeFromDynamicObject>(rawJson); 的动态对象?

【问题讨论】:

  • 您使用的是什么 JSON 提供程序?如果你尝试你的语法会发生什么?您不能在运行时生成类并在编译/开发时使用它。
  • 你可以使用Paste JSON as Classes
  • 唯一的方法是提前知道 JSON 格式/类是什么,然后创建该类。
  • @JSteward:它为我解决了所有问题!=)))

标签: c# .net dynamic mono


【解决方案1】:

在运行时生成类型对您没有多大帮助,因为您需要在编译时使用该类型才能获得早期绑定、类型安全和 Intellisense。一个更实际的想法是执行以下操作:

  1. 从您的日志中获取具有代表性的 JSON 字符串样本。

  2. Paste the JSON 到一个类中,并将其保存为项目中的 c# 代码。

  3. 开始使用类作为反序列化调用的类型参数。

完成此操作后,您将在代码库中拥有正确的类,并且可以针对它进行编译。如果向您发送 JSON 的人决定更改消息,则任何新字段都将被忽略。如果他们开始删除东西,那么您就会遇到问题,就像他们更改了 SOAP 服务的 WSDL 一样。您必须重复上述步骤,并更正代码中的任何重大更改。好消息是您将在编译时指导您进行重大更改:)

【讨论】:

    猜你喜欢
    • 2014-06-03
    • 2018-05-25
    • 2011-04-29
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    • 2016-09-13
    • 2012-06-10
    相关资源
    最近更新 更多