Saya menggunakan Json.NET untuk membuat cerita bersambung suatu kelas menjadi JSON.
Saya memiliki kelas seperti ini:
class Test1
{
[JsonProperty("id")]
public string ID { get; set; }
[JsonProperty("label")]
public string Label { get; set; }
[JsonProperty("url")]
public string URL { get; set; }
[JsonProperty("item")]
public List<Test2> Test2List { get; set; }
}
Saya ingin menambahkan JsonIgnore()
atribut ke Test2List
properti hanya jika Test2List
ada null
. Jika tidak nol maka saya ingin memasukkannya di json saya.
JsonSerializerSettings
tidakJsonSerializer
karena itu menunjukkan kesalahan untuk yang terakhirSolusi alternatif menggunakan
JsonProperty
atribut:Seperti yang terlihat dalam dokumen online ini .
sumber
[JsonObject]
, tetapi perhatikan bahwa nama atribut berbeda. [jawaban yang diedit]Mirip dengan jawaban @ sirthomas ini, JSON.NET juga menghormati para
EmitDefaultValue
properti diDataMemberAttribute
:Ini mungkin diinginkan jika Anda sudah menggunakan
[DataContract]
dan[DataMember]
dalam tipe model Anda dan tidak ingin menambahkan atribut JSON.NET-spesifik.sumber
Kamu bisa menulis:
[JsonProperty("property_name",DefaultValueHandling = DefaultValueHandling.Ignore)]
Ini juga menangani tidak membuat serialisasi properti dengan nilai default (tidak hanya nol). Ini bisa bermanfaat untuk enum misalnya.
sumber
Anda bisa melakukan ini untuk mengabaikan semua null di objek yang Anda serialkan, dan properti null apa pun tidak akan muncul di JSON
sumber
Seperti yang dapat dilihat di tautan ini di situs mereka (http://james.newtonking.com/archive/2009/10/23/efisien-json-with-json-net-netucing-serialized-json-size.aspx) I dukungan menggunakan [Default ()] untuk menentukan nilai default
Diambil dari tautan
sumber
Adaptasi untuk jawaban @ Mrchief's / @ amit, tetapi untuk orang yang menggunakan VB
Lihat: "Inisialisasi Objek: Tipe Bernama dan Anonim (Visual Basic)"
https://msdn.microsoft.com/en-us/library/bb385125.aspx
sumber
Di .Net Core ini jauh lebih mudah sekarang. Di startup.cs Anda cukup tambahkan opsi json dan Anda dapat mengonfigurasi pengaturan di sana.
sumber
Dengan Json.NET
Hasilnya adalah:
sumber
Dengan
System.Text.Json
dan .NET Core 3.0 ini berfungsi untuk saya:sumber
Untuk sedikit menguraikan jawaban GlennG yang sangat membantu (menerjemahkan sintaks dari C # ke VB.Net tidak selalu "jelas"), Anda juga dapat menghiasi properti kelas individu untuk mengelola bagaimana nilai-nilai nol ditangani. Jika Anda melakukan ini jangan gunakan global JsonSerializerSettings dari saran GlennG, jika tidak maka akan menimpa dekorasi individu. Ini sangat berguna jika Anda ingin item nol muncul di JSON sehingga konsumen tidak perlu melakukan penanganan khusus. Jika, misalnya, konsumen perlu mengetahui berbagai item opsional biasanya tersedia, tetapi saat ini kosong ... Dekorasi dalam deklarasi properti terlihat seperti ini:
Untuk properti yang Anda tidak ingin muncul sama sekali dalam perubahan JSON : = NullValueHandling.Termasuk ke : = NullValueHandling.Ignore . Ngomong-ngomong - Saya telah menemukan bahwa Anda dapat menghiasi properti untuk serialisasi XML dan JSON dengan baik (cukup letakkan di samping satu sama lain). Ini memberi saya pilihan untuk memanggil serializer XML di dotnet atau serializer NewtonSoft sesuka hati - keduanya bekerja berdampingan dan pelanggan saya memiliki opsi untuk bekerja dengan XML atau JSON. Ini licin karena ingus pada gagang pintu karena saya memiliki pelanggan yang membutuhkan keduanya!
sumber
Berikut ini opsi yang serupa, tetapi memberikan pilihan lain:
Lalu, saya menggunakannya seperti ini:
Perbedaannya di sini adalah:
JsonSerializerSettings
setiap tempat yang digunakan.sumber
sumber