这似乎应该很容易,但是当我尝试将一些简单的JSON 反序列化为托管类型时,却遇到了异常。例外是:
MissingMethodException 没有为’System.String’类型定义无参数构造函数
虽然确实没有System.String的无参数构造函数,但是我不清楚为什么这很重要。
执行反序列化的代码是:
using System.Web.Script.Serialization; private static JavaScriptSerializer serializer = new JavaScriptSerializer(); public static MyType Deserialize(string json) { return serializer.Deserialize<MyType>(json); }
我的类型大致是:
public class MyType { public string id { get; set; } public string type { get; set; } public List<Double> location { get; set; } public Address address { get; set; } public Dictionary<string, string> localizedStrings { get; set; } }
另一类用于地址:
public class Address { public string addressLine { get; set; } public string suite { get; set; } public string locality { get; set; } public string subdivisionCode { get; set; } public string postalCode { get; set; } public string countryRegionCode { get; set; } public string countryRegion { get; set; } }
这是JSON:
{ "id": "uniqueString", "type": "Foo", "location": [ 47.6, -122.3321 ] "address": { "addressLine": "1000 Fourth Ave", "suite": "en-us", "locality": "Seattle", "subdivisionCode": "WA", "postalCode": "98104", "countryRegionCode": "US", "countryRegion": "United States" }, "localizedStrings": { "en-us": "Library", "en-ES": "La Biblioteca" } }
即使我的JSON只是我,也会遇到相同的异常:
{ "id": "uniquestring" }
谁能告诉我为什么System.String需要无参数的构造函数?
无参数构造函数需要进行任何反序列化。想象一下您正在实现一个反序列化器。你需要: