これはとても簡単に思えますが、マネージタイプに deserialize いくつかの簡単な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; }
}
もう1つのクラスは住所用です。
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にパラメーターなしのコンストラクターが必要な理由を教えてもらえますか?
パラメータなしのコンストラクタは、あらゆる種類の逆シリアル化を必要とします。デシリアライザーを実装していると想像してください。必要がある:
私は同じ問題を抱えていましたが、これが問題を解決したものです。
乾杯!
//Deserializing Json object from string
DataContractJsonSerializer jsonObjectPersonInfo =
new DataContractJsonSerializer(typeof(PersonModel));
MemoryStream stream =
new MemoryStream(Encoding.UTF8.GetBytes(userInfo));
PersonModel personInfoModel =
(PersonModel)jsonObjectPersonInfo.ReadObject(stream);