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

pet*_*Foo 2 .net c# mono json json-deserialization

我无法弄清楚如何编写一个类来反序列化.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"
      }    ]
Run Code Online (Sandbox Code Playgroud)

所以我构造了这个类来处理反序列化:

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);
    }
}
}
Run Code Online (Sandbox Code Playgroud)

尽管已将有效的Json传递给方法,但反序列化的对象仍为null.

我尝试失败的其他事情包括:使Locations成为一个数组而不是一个列表(所以:public Location [] Location;),并反序列化到位置,即使Json包含一个位置数组.

那么,.Net开发人员如何期望反序列化一个对象数组呢?我期望以上工作,但事实并非如此.

I4V*_*I4V 9

只需返回一个数组

var locs = Location.DeserializedJson(json);
Run Code Online (Sandbox Code Playgroud)
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);
    }
}
Run Code Online (Sandbox Code Playgroud)

PS:请注意,[Serializable]s是不必要的.