c#中的json无效,即使它应该是

时间:2016-01-27 08:35:59

标签: c# asp.net .net json.net

我想解析这个json字符串:

string downloadedString = "[ {  \"type\" : 2,  \"value\" : \"Las Terrenas\",  \"label\" : \"Las Terrenas, (Dom. Republik Halbinsel Samana, Karibik)\",  \"regionCode\" : \"KB\",  \"zielCode\" : \"AZS\",  \"ortCode\" : \"67\",  \"giataCode\" : null,  \"chainCode\" : null}, {  \"type\" : 2,  \"value\" : \"Las Caletillas\",  \"label\" : \"Las Caletillas, (Teneriffa, Kanaren)\",  \"regionCode\" : \"KA\",  \"zielCode\" : \"TEN\",  \"ortCode\" : \"830\",  \"giataCode\" : null,  \"chainCode\" : null}, {  \"type\" : 2,  \"value\" : \"Las Tricias\",  \"label\" : \"Las Tricias, (La Palma, Kanaren)\",  \"regionCode\" : \"KA\",  \"zielCode\" : \"SPC\",  \"ortCode\" : \"10034\",  \"giataCode\" : null,  \"chainCode\" : null}, {  \"type\" : 2,  \"value\" : \"Las Norias\",  \"label\" : \"Las Norias, (La Palma, Kanaren)\",  \"regionCode\" : \"KA\",  \"zielCode\" : \"SPC\",  \"ortCode\" : \"6179\",  \"giataCode\" : null,  \"chainCode\" : null}, {  \"type\" : 2,  \"value\" : \"Las Manchas\",  \"label\" : \"Las Manchas, (La Palma, Kanaren)\",  \"regionCode\" : \"KA\",  \"zielCode\" : \"SPC\",  \"ortCode\" : \"1061\",  \"giataCode\" : null,  \"chainCode\" : null} ]";
JObject json = JObject.Parse(downloadedString);

但是我得到一个错误,这是无效的json。

如果我改为通过lint json验证器运行字符串:http://jsonlint.com/ 然后结果是“有效的json”。当然,我必须在jsonlint上测试之前替换\“with”,因此我将使用的字符串会有所不同:

[{"type" : 2,  "value" : "Las Terrenas",  "label" : "Las Terrenas, (Dom. Republik Halbinsel Samana, Karibik)",  "regionCode" : "KB",  "zielCode" : "AZS",  "ortCode" : "67",  "giataCode" : null,  "chainCode" : null}, {  "type" : 2,  "value" : "Las Caletillas",  "label" : "Las Caletillas, (Teneriffa, Kanaren)",  "regionCode" : "KA",  "zielCode" : "TEN",  "ortCode" : "830",  "giataCode" : null,  "chainCode" : null}, {  "type" : 2,  "value" : "Las Tricias",  "label" : "Las Tricias, (La Palma, Kanaren)",  "regionCode" : "KA",  "zielCode" : "SPC",  "ortCode" : "10034",  "giataCode" : null,  "chainCode" : null}, {  "type" : 2,  "value" : "Las Norias",  "label" : "Las Norias, (La Palma, Kanaren)",  "regionCode" : "KA",  "zielCode" : "SPC",  "ortCode" : "6179",  "giataCode" : null,  "chainCode" : null}, {  "type" : 2,  "value" : "Las Manchas",  "label" : "Las Manchas, (La Palma, Kanaren)",  "regionCode" : "KA",  "zielCode" : "SPC",  "ortCode" : "1061",  "giataCode" : null,  "chainCode" : null} ] 

有人可以告诉我为什么上面的json代码在c#中不是有效的json吗?

2 个答案:

答案 0 :(得分:4)

它是JSON数组,不是单个对象,因此应该以其他方式解析:

JArray json = JArray.Parse(downloadedString);

然后您可以将其元素作为json[i]访问。

答案 1 :(得分:1)

为了便于访问反序列化对象,我建议你为JSON对象添加一个类,如下所示:

public class MyJsonObject
{
    public string Type { get; set; }
    public string Value { get; set; }
    public string Label { get; set; }
    public string RegionCode { get; set; }
    public string ZielCode { get; set; }
    public string OrtCode { get; set; }
    public string GiataCode { get; set; }
    public string ChainCode { get; set; }
}

然后,您可以使用以下命令来转换JSON字符串:

IList<MyJsonObject> json = JsonConvert.DeserializeObject<IList<MyJsonObject>>(downloadedString);