Sepertinya ini seharusnya sangat mudah, tetapi saya mendapatkan pengecualian ketika saya mencoba untuk deserialisasi beberapa JSON langsung ke dalam tipe terkelola. Pengecualiannya adalah:
Pengecualian Metode yang Hilang Tidak ada konstruktor tanpa parameter yang didefinisikan untuk tipe 'System.String'
Meskipun benar bahwa tidak ada konstruktor tanpa parameter untuk System.String, saya tidak mengerti mengapa hal ini penting.
Kode yang melakukan deserialisasi adalah:
using System.Web.Script.Serialization;
private static JavaScriptSerializer serializer = new JavaScriptSerializer();
public static MyType Deserialize(string json)
{
return serializer.Deserialize<MyType>(json);
}
Tipe saya kira-kira:
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; }
}
Kelas lainnya adalah untuk alamat:
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; }
}
Ini dia JSON-nya:
{
"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"
}
}
Saya mendapatkan pengecualian yang sama meskipun JSON saya hanya:
{
"id": "uniquestring"
}
Adakah yang bisa memberi tahu saya mengapa konstruktor tanpa parameter diperlukan untuk System.String?
Konstruktor tanpa parameter diperlukan untuk segala jenis deserialisasi. Bayangkan Anda sedang mengimplementasikan sebuah deserialisasi. Anda harus melakukannya:
Saya mengalami masalah yang sama dan inilah yang memperbaiki masalah tersebut.
Bersulang!
//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);