【问题标题】:How to deserialize JSON objects (of a schema given at runtime) to serializable C# objects?如何将 JSON 对象(在运行时给出的模式)反序列化为可序列化的 C# 对象?
【发布时间】:2020-01-19 15:04:16
【问题描述】:

给定一个JSON schema(在运行时给出),我需要一个 C# 中的函数,它接受一个字符串作为参数,验证给定字符串是否是给定模式的有效 JSON 对象并返回一个 C# 可序列化对象。

对于 C# 可序列化对象,我的意思是可以添加到 ValueSet 的对象。

问题 1: 我知道,使用Json.NET 我可以反序列化 JSON 对象,但这仅适用于在编译时定义的类,而我的 JSON 模式是在运行时给出的,因此这些类在编译时尚未定义!

问题 2: Json.NET 未返回可序列化对象,即 Json.NET 返回的对象无法添加到 ValueSet!

【问题讨论】:

  • 你需要什么值集你真正想要什么你能展示一些示例
  • 你可以尝试使用dynamic对象
  • 不,jsom.net 不仅反序列化为 c# 类,它还反序列化为动态对象,从而为您提供 JObject、Jtoken 或其他您可以通过的 JToken
  • 很好,谢谢!但是这些动态生成的类型仍然无法添加到 ValueSet 中!

标签: c# json json.net deserialization jsonschema


【解决方案1】:

虽然它不能完全解决您的问题,但可能有一种解决方法:组合。

创建一个实现ISerializable 并具有动态属性的包装类。反序列化您的对象并将其存储在此属性中。您必须为您的对象提供反序列化代码,但这应该很简单:只需让 JSON 序列化程序完成工作即可。

您遇到的麻烦是您要求一个尽可能通用编写的库来做一些非常具体的事情。你很难找到一个这样做的图书馆。 (虽然我认为这是个好主意,我可能会将它添加到我的类型生成功能中。)


(无耻塞)还有,你看过Manatee.Json吗?

【讨论】:

    猜你喜欢
    • 2020-07-19
    • 2013-02-10
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多