2017-07-29 46 views
1

我只需遵循json和类,我想要DeserializeObject对象。JsonConvert不正确反序列化对象

{"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"); 

任何人都已经有这个问题,能帮帮我吗?

+0

答案帮助@michelalmeida? – mjwills

回答

4

添加一个新类:

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

,然后而不是读/ deserialising为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)或更改代码(按照我的课程)。