这是调用某宝接口返回的json字符串:
{"tmall_msf_identify_status_query_response":{"result":"{errorMessage=服务类型不对, gmtCurrentTime=1469153603575, errorCode=352, class=com.tmall.msf.common.dto.Result, object=null, success=false, costTime=null}","request_id":"3jvhmoxlvkco"}}
本人试图用newtonjson的DeserializeObject方法,将其反序列化成.net对像,为此本人建立了两个类
public class result { public string errorMessage { get; set; } public long gmtCurrentTime { get; set; } public int errorCode { get; set; } public string @class { get; set; } public object @object { get; set; } public bool success { get; set; } public object costTime { get; set; } } public class tmall_msf_identify_status_query_response { public result result { get; set; } public string request_id { get; set; } }
但发现反序列化后得到的obj总是null值
tmall_msf_identify_status_query_response obj = JsonConvert.DeserializeObject<tmall_msf_identify_status_query_response>(json);
本人该怎么样反序列化才能得到正确的结果?
解决方案
20
通过VS2013功能“将Json粘贴为类”结果是这样的
public class Rootobject { public Tmall_Msf_Identify_Status_Query_Response tmall_msf_identify_status_query_response { get; set; } } public class Tmall_Msf_Identify_Status_Query_Response { public string result { get; set; } public string request_id { get; set; } }
你会发现result后边的是在双引号里面的,引号里面的都是result的值
40
var s = File.ReadAllText("d5.txt", Encoding.Default); var a = JObject.Parse(s); foreach (var x in (JObject)a["tmall_msf_identify_status_query_response"]) { Console.WriteLine("{0} : {1}", x.Key, x.Value); if (x.Key == "result") { //这样转成 json 串 var t = Regex.Replace(x.Value.ToString(), "=([^,}]+)", ":"$1""); foreach (var y in JObject.Parse(t)) { Console.WriteLine("{0} : {1}", y.Key, y.Value); } } }