1

我正在使用 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"
}

知道如何解决这个问题吗?先感谢您。

4

2 回答 2

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_support”的值更改为不是默认值,以验证它是否正确反序列化。

于 2012-06-12T14:19:16.497 回答
1

好的,我意识到,这是一个非常古老的线程。但是我早些时候遇到了类似的问题并遇到了这个线程。

在我的情况下,我试图 se/deserialize 的类中有一个List<ClassName>公共属性。哪个序列化很好,但不会反序列化。我将其切换到ClassName[]并修复了反序列化问题。

希望它可以帮助遇到这个线程的其他人,或者至少给他们一些其他的东西来寻找。

于 2014-03-27T01:15:17.980 回答