Cela semble être si facile, mais je reçois une exception lorsque j'essaie de désérialiser un JSON simple en un type géré. L'exception est:
MissingMethodException
Aucun constructeur sans paramètre défini pour le type de 'System.String'
S'il est vrai qu'il n'y a pas de constructeur sans paramètre pour System.String, je ne sais pas pourquoi cela est important.
Le code qui effectue la désérialisation est:
using System.Web.Script.Serialization;
private static JavaScriptSerializer serializer = new JavaScriptSerializer();
public static MyType Deserialize(string json)
{
return serializer.Deserialize<MyType>(json);
}
Mon type est à peu près:
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; }
}
L'autre classe est pour une adresse:
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; }
}
Voici le 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"
}
}
Je reçois la même exception même si mon JSON est juste:
{
"id": "uniquestring"
}
Quelqu'un peut-il me dire pourquoi un constructeur sans paramètre est nécessaire pour System.String?
Les constructeurs sans paramètres ont besoin de tout type de désérialisation. Imaginez que vous implémentez un désérialiseur. Tu dois:
J'ai eu le même problème et c'est ce qui a résolu le problème.
À votre santé!
//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);