Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Deserialize JSON menjadi IEnumerable dengan Newtonsoft JSON.NET apabila BaseType adalah Abstrak?

Bagaimana untuk Deserialize JSON menjadi IEnumerable dengan Newtonsoft JSON.NET apabila BaseType adalah Abstrak?

DDD
Lepaskan: 2025-01-17 13:36:09
asal
947 orang telah melayarinya

How to Deserialize JSON into an IEnumerable with Newtonsoft JSON.NET when BaseType is Abstract?

Gunakan Newtonsoft JSON.NET untuk menyahsiri JSON kepada IEnumerable

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>
Salin selepas log masuk

dan asas abstrak berikut dan kelas terbitan:

<code>public abstract class BaseClass
{
    public string Email;
}
public class ClassA : BaseClass
{
}
public class ClassB : BaseClass
{
}</code>
Salin selepas log masuk

Apabila cuba menyahsiri JSON kepada:

<code>IEnumerable<基类> deserialized;</code>
Salin selepas log masuk

Apabila menggunakan JsonConvert.Deserialize>(), anda akan menghadapi ralat kerana BaseClass adalah abstrak.

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>
Salin selepas log masuk

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>
Salin selepas log masuk

Deserialisasi kini berfungsi dengan betul selepas memasukkan maklumat jenis:

<code>IEnumerable<BaseClass> obj = JsonConvert.DeserializeObject<IEnumerable<BaseClass>>(strJson, settings);</code>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan