Apabila BaseType ialah kelas abstrak, mungkin sukar untuk menggunakan JsonConvert.Deserialize untuk menyahsiri data JSON kepada IEnumerable
Soalan:
Pertimbangkan JSON berikut:
<code>[ { "$id": "1", "$type": "MyAssembly.ClassA, MyAssembly", "Email": "[email\u00a0protected]" }, { "$id": "2", "$type": "MyAssembly.ClassB, MyAssembly", "Email": "[email\u00a0protected]" } ]</code>
dan asas abstrak berikut dan kelas terbitan:
<code>public abstract class BaseClass { public string Email; } public class ClassA : BaseClass { } public class ClassB : BaseClass { }</code>
Apabila cuba menyahsiri JSON kepada:
<code>IEnumerable<基类> deserialized;</code>
Apabila menggunakan JsonConvert.Deserialize
Penyelesaian:
Untuk menyelesaikan masalah ini, gunakan tetapan TypeNameHandling dalam JsonSerializerSettings. Dengan menetapkan tetapan ini kepada TypeNameHandling.All, maklumat jenis akan disertakan dalam JSON yang dinyahsiri.
<code>JsonSerializerSettings settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All }; string strJson = JsonConvert.SerializeObject(instance, settings);</code>
JSON yang dikemas kini:
<code>{ "$type": "System.Collections.Generic.List`1[[MyAssembly.BaseClass, MyAssembly]], mscorlib", "$values": [ { "$id": "1", "$type": "MyAssembly.ClassA, MyAssembly", "Email": "[email\u00a0protected]", }, { "$id": "2", "$type": "MyAssembly.ClassB, MyAssembly", "Email": "[email\u00a0protected]", } ] }</code>
Deserialisasi kini berfungsi dengan betul selepas memasukkan maklumat jenis:
<code>IEnumerable<BaseClass> obj = JsonConvert.DeserializeObject<IEnumerable<BaseClass>>(strJson, settings);</code>
Atas ialah kandungan terperinci Bagaimana untuk Deserialize JSON menjadi IEnumerable dengan Newtonsoft JSON.NET apabila BaseType adalah Abstrak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!