如何从动态对象创建 C# class 代码?

How to create C# class code from dynamic object?

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

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

在 run-time 处生成一个类型不会对您有多大帮助,因为您需要在编译时使用该类型以获得早期绑定、类型安全和智能感知。一个更实际的想法是执行以下操作:

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

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

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

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