如何反序列化一个没有名称的 JSON 数组?

4

我不知道如何在.Net中编写用于反序列化JSON对象列表的类。

从JSON规范中我们可以了解到,以下内容是合法的JSON:

   [
      {
         "precision": "zip",
         "Latitude":  37.7668,
         "Longitude": -122.3959,
         "Address":   "",
         "City":      "SAN FRANCISCO",
         "State":     "CA",
         "Zip":       "94107",
         "Country":   "US"
      },
      {
         "precision": "zip",
         "Latitude":  37.371991,
         "Longitude": -122.026020,
         "Address":   "",
         "City":      "SUNNYVALE",
         "State":     "CA",
         "Zip":       "94085",
         "Country":   "US"
      }    ]

因此,我构建了这个类来处理反序列化:

using System;
using System.Collections.Generic;
using System.Web.Script.Serialization;

namespace JsonRfc{

[Serializable]
public class Location {

    public string Precision;
    public double Latitude;
    public double Longitude;
    public string Address;
    public string City;
    public string State;
    public string Zip;
    public string Country;

    public Location(){}

    public static Location DeserializedJson(string responseJson)
    {
        JavaScriptSerializer jsSerializer = new JavaScriptSerializer();
        return jsSerializer.Deserialize<Location>(responseJson);
    }
}

[Serializable]
public class Locations {

    public List<Location> Location;

    public Locations(){}

    public static Locations DeserializedJson(string responseJson)
    {
        JavaScriptSerializer jsSerializer = new JavaScriptSerializer();
        return jsSerializer.Deserialize<Locations>(responseJson);
    }
}
}

尽管传递给方法的Json有效,但反序列化对象为空。

我尝试过的其他失败的方法包括:将Locations更改为数组而不是列表(所以:public Location[] Location;),并将其反序列化为location,即使Json包含位置数组。

那么,.Net开发人员应该如何反序列化对象数组呢? 我期望上述方法可行,但实际上并不可行。


1
这只是一个猜测。尝试将“Locations”变成一个列表。“public class Locations:List <Locations> { ...” - Mike Park
1个回答

11

只需返回一个数组

var locs = Location.DeserializedJson(json);

public class Location
{

    public string Precision;
    public double Latitude;
    public double Longitude;
    public string Address;
    public string City;
    public string State;
    public string Zip;
    public string Country;

    public static Location[] DeserializedJson(string responseJson)
    {
        JavaScriptSerializer jsSerializer = new JavaScriptSerializer();
        return jsSerializer.Deserialize<Location[]>(responseJson);
    }
}

提示:注意到 [Serializable] 并不是必需的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接