我正在使用Json.Net来处理我的应用程序中来自Pipl.com API的API调用的响应的反序列化,并且它工作正常但是由于某些奇怪的原因它不会反序列化JSON的特定属性我提供给JsonConvert.DeserializeObject方法的字符串。
我的课是这样的:
public class Source
{
public string Dsname { get; set; }
public bool IsSponsored { get; set; }
public string Url { get; set; }
public string Domain { get; set; }
public uint ExternalID { get; set; }
public Source()
{
}
}
并且除了Dsname之外的所有内容都会被正确反序列化。要转换的Json是这样的:
"source": {
"@is_sponsored": false,
"@ds_name": "Personal Web Space -MySpace",
"url": "http://www.foo.bar"
"domain": "myspace.com"
}
知道怎么解决这个问题吗?提前谢谢。
答案 0 :(得分:1)
我添加了一个包装类,并将属性名称指定为属性,如下所示:
public class Source
{
[JsonProperty(PropertyName = "@ds_name")]
public string Dsname { get; set; }
[JsonProperty(PropertyName = "@is_sponsored")]
public bool IsSponsored { get; set; }
public string Url { get; set; }
public string Domain { get; set; }
public uint ExternalID { get; set; }
}
public class RootObject
{
public Source source { get; set; }
}
然后我能够反序列化罚款:
var json = "{\"source\": { \"@is_sponsored\": true, \"@ds_name\": \"Personal Web Space -MySpace\", \"url\": \"http://www.foo.bar\", \"domain\": \"myspace.com\"}}";
var des = JsonConvert.DeserializeObject<RootObject>(json);
请注意我:
- 将样品包裹在花括号中,使其成为有效的JSON
- 添加了一个缺少的逗号
- 将“@is_sponsored”的值更改为不是默认值,以验证它是否已正确解除序列化。
答案 1 :(得分:1)
好的,我知道,这是一个非常古老的主题。但是我之前遇到过类似的问题并遇到了这个问题。
在我的情况下,我尝试se / deserialize的课程中有一个List<ClassName>
公共财产。序列化很好,但不会反序列化。我将其切换到ClassName[]
并修复了反序列化问题。
希望它可以帮助遇到这个帖子的其他人,或者至少给他们一些其他东西来寻找。