2013-06-18 57 views
1

接收以下从SFDC REST Web服务(字符串jsonResponse下面)回应:反序列化SFDC REST服务JSON resopnse

{ 
    "responseDataList": [{ 
     "salesforceRecordId": "a00C000000L5DQRIA3", 
     "recordName": "Computer_Name_2", 
     "IsSuccess": true, 
     "errorMessage": null 
    }] 
} 

试图与ServiceStack.JsonSerializer到反序列化:

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
    string jsonResponse = new StreamReader(response.GetResponseStream()).ReadToEnd(); 
    ResponseDataList list = JsonSerializer.DeserializeFromString<ResponseDataList>(jsonResponse); 

ResponseDataList有以下结构:

public class ResponseData 
{ 
    public string salesforceRecordId { get; set; } 
    public string recordName { get; set; } 
    public bool IsSuccess { get; set; } 
    public string errorMessage { get; set; } 
} 

public class ResponseDataList 
{ 
    List<ResponseData> responseDataList { get; set; } 
} 

然而,反序列化ResponseDataList列表为空。我做错了什么,如何正确反序列化?

回答

4

通过使responseDataList为public,我能够正确反序列化。

public class ResponseDataList 
{ 
    public List<ResponseData> responseDataList { get; set; } 
} 
+0

儿童拼错,谢谢。不过,我在这里得到了错误:类型定义应该以'{'开头,期望序列化类型'ResponseDataList',得到的字符串以“{\”responseDataList \“:[{\”salesforceRecordId \“:\”开头。这里有什么问题? –

+0

嗯...似乎反应包含明确的双引号,转义字符等奇怪的,如何克服这一点? –

+0

如果服务器正在返回转义字符串,请使用序列化程序来避开它JsonSerializer.DeserializeFromString (jsonResponse); –

1

如果你打开使用Json.NET做反序列化,而不是服务栈,而不必使DataResponseList类,如下所示,你可以很容易地做到这一点:

var client = new WebClient(); 
var json = client.DownloadString("url"); 
IList<ResponseData> data = JsonConvert.DeserializeObject<List<ResponseData>>(json); 
+0

哪个.Net组件包含这个? WCF? –

+0

这是一个第三方库,如可作为NuGet包使用的服务堆栈,但它的用途已经非常普遍,Visual Studio会自动在MVC 4项目中包含并引用它。你可以搜索NuGet for Json.NET,或者这里是网站:http://james.newtonking.com/pages/json-net.aspx – Jedediah