JsonConvert没有正确地反序列化对象

时间:2017-07-29 00:20:30

标签: c#

我有这个简单地遵循我想要DeserializeObject对象的json和类。

{"UnsubscribeResponse": {
   "txId": "123",
   "result": "Success",
   "message": "OK"
}}

public class UnsubscribeResponse
{
    public string  TxId { get; set; }

    public string Result { get; set; }

    public string Message { get; set; }
}

我只是尝试使用以下方法,但其中任何一个都为我工作。

unsubscribeResponse = await response.Content.ReadAsAsync<UnsubscribeResponse>();


unsubscribeResponse = JsonConvert.DeserializeObject<UnsubscribeResponse>(contents, new JsonSerializerSettings()
{
    ContractResolver = new CamelCasePropertyNamesContractResolver(),
                         ObjectCreationHandling = ObjectCreationHandling.Auto
});

它工作的唯一方法我必须使用如下的JObject类:

var resp = JObject.Parse(contents).SelectToken("UnsubscribeResponse");

任何人都有这个问题,可以帮助我吗?

1 个答案:

答案 0 :(得分:4)

添加新课程:

public class UnsubscribeResponsewrapper
{
    public UnsubscribeResponse UnsubscribeResponse { get; set; }
}

然后使用UnsubscribeResponse而不是阅读/反序列化为UnsubscribeResponseWrapper。这是必要的,因为您的JSON是:

{"UnsubscribeResponse": {
   "txId": "123",
   "result": "Success",
   "message": "OK"
}}

要使原始代码起作用,JSON需要类似于:

{
   "txId": "123",
   "result": "Success",
   "message": "OK"
}

您需要额外的类,因为您的JSON具有UnsubscribeResponse属性。我怀疑你正在查看你的JSON并且认为这是一个UnsubscribeResponse对象及其属性但实际上并不是你的JSON。它是这是一个对象,具有UnsubscribeResponse属性(并且该属性具有一组自己的属性)。因此,您需要更改JSON(根据我更改的JSON)或更改代码(根据我的类)。