【发布时间】:2016-04-07 00:36:55
【问题描述】:
我正在尝试解析一些具有已知顶级架构的 JSON。然而,架构内部是一个 JSON 对象,可以包含各种类型的 JSON 对象。
例子
{
"knownfield1": data,
"knownfield2": data,
"knownfieldcollection":
{
"fieldofunknowntype1": "string data",
"fieldofunknowntype2":
{
"subunknownfield1": "string data",
"subunknownfield1": null
},
"fieldofunknowntype3": null
}
}
我想创建一个包含已知字段映射的对象,但可以动态读取未知字段。我正在尝试使用 Json.Net JToken 和 JObject,但我无法让它工作。我不断收到递归 JToken 异常。
对此的任何指示都会很棒。谢谢。
我得到的异常:
Type 'Newtonsoft.Json.Linq.JToken' is a recursive collection data
contract which is not supported. Consider modifying the definition of
collection 'Newtonsoft.Json.Linq.JToken' to remove references to itself.
--编辑-- 对象的集合类型错误,已修复。
【问题讨论】:
-
糟糕,我的打字错误。让我解决这个问题。
-
JObject 有什么问题?您可以使用 JObject.Parse 解析您的 json 字符串。
-
我正在将 json 反序列化为一个定义了所有已知字段的 C# 对象。但是对于我的生活,如果我在 C# 对象中使用属性,我无法让“knownfieldcollection”(对象)反序列化。我已经尝试过
public JObject Field {get; set;},但我得到了一个关于 JToken 引用自身的递归异常。 -
要使用 JObject,您必须解析整个 Json 字符串。这可能是一个解决方案吗?无论如何,您有一个动态对象....
-
看起来您实际上并没有使用 Json.NET 进行反序列化,而是使用了
DataContactJsonSerializer和/或wcf。请参阅Self Hosted WCF Rest service ERROR : Type 'Newtonsoft.Json.Linq.JToken' is a recursive collection data contract which is not supported、How to have a WCF DataContract with a json dynamic member 和 ikriv.com/blog/?p=1703。您能否针对您的问题创建一个mcve,显示您如何反序列化您的 JSON?