如何让 Json.Net 在不忽略子属性的情况下从 documentDB 序列化/反序列化动态/通用对象?

Posted

技术标签:

【中文标题】如何让 Json.Net 在不忽略子属性的情况下从 documentDB 序列化/反序列化动态/通用对象?【英文标题】:How to get Json.Net to serialize / deserialize dynamic / generic object from documentDB without ignoring subprops? 【发布时间】:2016-05-11 21:31:42 【问题描述】:

在 documentdb 中,我有一些 json 结构。

 "blah": "blahblahblah", 
  "blah": null, 
  "dynamicBlah": 
      "propertyhere": [
        "xyz"
      ]
   , 

在我的 c# 模型中,它反序列化为 一个对象很好,除了 dynamicBlah 对象作为 JObject 存在,但是当它作为 JSONResult 返回给客户端(再次序列化)时,该属性就像这样出来......

"dynamicBlah": [
    [
        [
             []
        ]
    ]
 ]

一些事情:

该属性的用途只是传递记录中的任何自定义 json,因此类型可以是任何类型,因此它必须是动态或对象类型。 我不能只是将其反序列化为字符串,因为某些 C# 可能需要访问该对象,并且必须不断将其转换为 json 并返回,这会很痛苦 我知道 Json.net 可以序列化/反序列化对象和动态,因为我已经在其他地方完成了它,没有任何问题。但是,从文档 db 中获取它会导致序列化程序忽略动态的子属性。 是的,我已经尝试标记它 [JsonProperty] 是的,我已经将它作为动态和对象进行了尝试 Json.net 显然认识到那里有东西,因为它输出了多个空级别的 json。 当对象既是对象又是集合时会发生这种情况

谁能告诉我如何让 Json.net 不忽略子属性?最终结果应该是与 documentdb 中相同的 json 结构。

更新:

不让它成为字典不起作用,因为它只输入***,所以我最终得到 ​​p>

"dynamicBlah": "xyz": [
        []
    ]

当 xyz 是另一个对象或字符串列表或任何东西时......

【问题讨论】:

【参考方案1】:

所以我在这篇文章中找到了答案。

Deserialize Dynamic Json string using Newtonsoft JSON.NET

在我的模型中将匿名对象设为 System.Dynamic.ExpandoObject 类型可以让反序列化器正常工作。就是这样!

【讨论】:

以上是关于如何让 Json.Net 在不忽略子属性的情况下从 documentDB 序列化/反序列化动态/通用对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用子进程的情况下从 python 自动化脚本中运行 python 'sdist' 命令?

如何在不破坏内部绑定的情况下从外部初始化自定义项的属性?

如何让 GraphQL 在不进行轮询的情况下从数据库中获取实时/新数据?

如何在不使用 ImageView 的情况下从 API 端点下载图像或位图?

如何在不使用自定义适配器的情况下从 ListView 获取特定的 TextView (View)?

在不知道所有属性的情况下从 HTML 标记内部获取文本