C# 无法将类型反序列化为JToken
我无法反序列化我的JSON的Tags属性:C# 无法将类型反序列化为JToken,c#,json,f#,json.net,C#,Json,F#,Json.net,我无法反序列化我的JSON的Tags属性: { "posts": [ { "ID": 7096, "title": "Backwards Pipe Operator", "URL": "https://bizmonger.wordpress.com/2017/10/26/backwards-pipe-operator/", "tags": { "
{
"posts": [
{
"ID": 7096,
"title": "Backwards Pipe Operator",
"URL": "https://bizmonger.wordpress.com/2017/10/26/backwards-pipe-operator/",
"tags": {
"F#": {
"ID": 6012,
"name": "F#"
}
}
}
]
}
根据上面的JSON,我提供了以下类型:
type Post = {
title: string
URL: string
Tags: JToken seq // Used to refer to the string instead of the property type
}
type Response = { posts: Post list }
尝试反序列化Post值的Tags属性时遇到异常:
let settings=JsonSerializerSettings()
settings.MissingMemberHandling库非常明确地告诉您出了什么问题:无法反序列化。。。JSON对象。。。输入类型“JToken seq”,因为该类型需要一个JSON数组才能正确反序列化
Seq
是内容的序列(即列表、数组、枚举)。它对应于JSON数组,而不是JSON对象
要在不预先知道属性名称的情况下反序列化JSON对象,请使用IDictionary
:
type Post = {
title: string
URL: string
Tags: IDictionary<string, JToken>
}
库非常明确地告诉您错误所在:无法反序列化。。。JSON对象。。。输入类型“JToken seq”,因为该类型需要一个JSON数组才能正确反序列化
Seq
是内容的序列(即列表、数组、枚举)。它对应于JSON数组,而不是JSON对象
要在不预先知道属性名称的情况下反序列化JSON对象,请使用IDictionary
:
type Post = {
title: string
URL: string
Tags: IDictionary<string, JToken>
}
type Post = {
title: string
URL: string
Tags: IDictionary<string, JToken>
}
type Tag = { ID: string; name: string }
type Post = {
title: string
URL: string
Tags: IDictionary<string, Tag>
}