Mengendalikan penyahserikatan tatasusunan dan objek pilihan dalam JSON.NET
Apabila menggunakan perpustakaan JSON.NET untuk memproses data yang dikembalikan oleh Facebook, anda mungkin mengalami perubahan dalam struktur JSON. Sesetengah sifat kadangkala diwakili sebagai tatasusunan dan kadangkala sebagai objek. Ini boleh menyebabkan isu penyahserikatan.
Soalan
Sesetengah siaran Facebook mungkin mengembalikan JSON dalam format berikut, yang menyebabkan penyahserikatan gagal:
<code class="language-json">"attachment": { "media":{}, "name":"", "caption":"", "description":"", "properties":{}, "icon":"http://www.facebook.com/images/icons/mobile_app.gif", "fb_object_type":"" }, "permalink":"http://www.facebook.com/1234"</code>
Penyelesaian
Untuk menyelesaikan masalah ini, anda boleh menggunakan kelas JsonConverter
untuk melaksanakan penukar JSON tersuai. Penukar ini akan mengendalikan tatasusunan dan struktur objek bagi sifat tertentu.
Penukar JSON tersuai
Penukar tersuai berikut SingleValueArrayConverter
menukar satu objek kepada senarai, membenarkan sifat dinyahsiri dengan betul:
<code class="language-csharp">public class SingleValueArrayConverter<T> : JsonConverter { public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { throw new NotImplementedException(); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { object retVal; if (reader.TokenType == JsonToken.StartObject) { T instance = (T)serializer.Deserialize(reader, typeof(T)); retVal = new List<T>() { instance }; } else if (reader.TokenType == JsonToken.StartArray) { retVal = serializer.Deserialize(reader, objectType); } else { retVal = null; // 处理其他情况,例如空值 } return retVal; } public override bool CanConvert(Type objectType) { return true; } }</code>
Penggunaan
Untuk menggunakan penukar tersuai, anotasi sifat dalam kelas sasaran dengan atribut JsonConverter
:
<code class="language-csharp">[JsonConverter(typeof(SingleValueArrayConverter<OrderItem>))] public List<OrderItem> Items { get; set; }</code>
Ini akan membolehkan JSON.NET mengendalikan tatasusunan dan struktur objek bagi sifat Items
, sekali gus menyelesaikan isu penyahserialisasian. Perhatikan penambahan get; set;
dan pengendalian else
kes untuk menjadikannya lebih mantap.
Atas ialah kandungan terperinci Bagaimana untuk Menyahseri JSON dengan Tatasusunan dan Objek Pilihan dalam JSON.NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!