如何在不忽略子道具的情况下让 Json.Net 序列化/反序列化来自 documentDB 的动态/通用对象?
How to get Json.Net to serialize / deserialize dynamic / generic object from documentDB without ignoring subprops?
在 documentdb 中我有一些 json 结构。
{ "blah": "blahblahblah",
"blah": null,
"dynamicBlah": {
"propertyhere": [
"xyz"
]
},
}
在我的反序列化的 C# 模型中
一个对象就好了,除了 dynamicBlah 对象作为 JObject 存在,但是当它作为 JSONResult 返回给客户端(再次序列化)时 属性 就像这样出现...
"dynamicBlah": [
[
[
[]
]
]
]
几件事:
- 属性 的目的只是为了传递记录中的任何自定义 json,因此类型可以是任何类型,因此它必须是动态类型或对象类型。
- 我不能只将它反序列化为字符串,因为某些 C# 可能需要访问该对象,并且必须不断地将其转换为 json 并返回
会很痛苦
- 我知道 Json.net 可以 serialize/deserialize 对象和动态,因为我在其他地方做过,没有问题。但是,从文档数据库中获取它会使序列化程序忽略动态的子属性。
- 是的,我试过标记它 [JsonProperty]
- 是的,我已经尝试过动态和对象
- Json.net 显然识别出那里有东西,因为它输出多个 json 的空级别。
- 当对象既是对象又是集合时会发生这种情况
谁能告诉我如何让 Json.net 不忽略子属性?最终结果应该与 documentdb 中的 json 结构相同。
更新:
不让它成为字典是行不通的,因为它只键入顶层,所以我最终得到
"dynamicBlah": {"xyz": [
[]
]
}
当 xyz 是另一个对象或字符串列表或任何东西时...
所以我在这个post中找到了答案。
Deserialize Dynamic Json string using Newtonsoft JSON.NET
将模型中的匿名对象设为 System.Dynamic.ExpandoObject 类型可以使反序列化器正常工作。就是这样!
在 documentdb 中我有一些 json 结构。
{ "blah": "blahblahblah",
"blah": null,
"dynamicBlah": {
"propertyhere": [
"xyz"
]
},
}
在我的反序列化的 C# 模型中 一个对象就好了,除了 dynamicBlah 对象作为 JObject 存在,但是当它作为 JSONResult 返回给客户端(再次序列化)时 属性 就像这样出现...
"dynamicBlah": [
[
[
[]
]
]
]
几件事:
- 属性 的目的只是为了传递记录中的任何自定义 json,因此类型可以是任何类型,因此它必须是动态类型或对象类型。
- 我不能只将它反序列化为字符串,因为某些 C# 可能需要访问该对象,并且必须不断地将其转换为 json 并返回 会很痛苦
- 我知道 Json.net 可以 serialize/deserialize 对象和动态,因为我在其他地方做过,没有问题。但是,从文档数据库中获取它会使序列化程序忽略动态的子属性。
- 是的,我试过标记它 [JsonProperty]
- 是的,我已经尝试过动态和对象
- Json.net 显然识别出那里有东西,因为它输出多个 json 的空级别。
- 当对象既是对象又是集合时会发生这种情况
谁能告诉我如何让 Json.net 不忽略子属性?最终结果应该与 documentdb 中的 json 结构相同。
更新:
不让它成为字典是行不通的,因为它只键入顶层,所以我最终得到
"dynamicBlah": {"xyz": [
[]
]
}
当 xyz 是另一个对象或字符串列表或任何东西时...
所以我在这个post中找到了答案。
Deserialize Dynamic Json string using Newtonsoft JSON.NET
将模型中的匿名对象设为 System.Dynamic.ExpandoObject 类型可以使反序列化器正常工作。就是这样!