Saya mencoba menggunakan kode berikut untuk membuat serialkan jenis anonim ke JSON:
var serializer = new DataContractJsonSerializer(thing.GetType());
var ms = new MemoryStream();
serializer.WriteObject(ms, thing);
var json = Encoding.Default.GetString(ms.ToArray());
Namun, saya mendapatkan pengecualian berikut saat ini dijalankan:
Ketik '<> f__AnonymousType1`3 [System.Int32, System.Int32, System.Object []]' tidak dapat diserialisasi. Pertimbangkan menandainya dengan atribut DataContractAttribute, dan menandai semua anggotanya yang ingin Anda serialkan dengan atribut DataMemberAttribute. Lihat dokumentasi Microsoft .NET Framework untuk jenis yang didukung lainnya.
Saya tidak bisa menerapkan atribut ke tipe anonim (sejauh yang saya tahu). Apakah ada cara lain untuk melakukan serialisasi ini atau saya kehilangan sesuatu?
System.Web.Extensions.dll
dan menambahkanusing System.Web.Script.Serialization;
pernyataan.Seperti yang disebutkan orang lain, Newtonsoft JSON.NET adalah pilihan yang baik. Berikut adalah contoh spesifik untuk serialisasi JSON sederhana:
Saya telah menemukannya sebagai perpustakaan yang fleksibel dan fleksibel.
sumber
Anda dapat mencoba ServiceStack JsonSerializer saya. Ini adalah serializer .NET JSON tercepat saat ini. Ini mendukung serialisasi DataContract's, Setiap Jenis POCO, Antarmuka, objek Terlambat termasuk jenis anonim, dll.
Contoh dasar
Catatan: Hanya gunakan Microsoft JavaScriptSerializer jika kinerjanya tidak penting bagi Anda karena saya harus meninggalkannya dari tolok ukur saya karena itu hingga 40x-100x lebih lambat daripada serialisator JSON lainnya.
sumber
Harap perhatikan ini dari 2008. Hari ini saya berpendapat bahwa serializer harus dibuat di dalam dan bahwa Anda mungkin dapat menggunakan atribut swagger + untuk memberi tahu konsumen tentang titik akhir Anda dan mengembalikan data.
Saya akan berpendapat bahwa Anda seharusnya tidak membuat serial jenis anonim . Saya tahu godaan di sini; Anda ingin dengan cepat menghasilkan beberapa tipe yang dibuang yang hanya akan digunakan dalam lingkungan tipe yang longgar alias Javascript di browser. Namun, saya akan membuat tipe aktual dan menghiasnya sebagai Serializable. Maka Anda bisa sangat mengetik metode web Anda. Meskipun ini tidak masalah satu sedikit pun untuk Javascript, itu menambahkan beberapa dokumentasi diri ke metode. Setiap programmer yang cukup berpengalaman akan dapat melihat fungsi tanda tangan dan berkata, "Oh, ini tipe Foo! Saya tahu bagaimana seharusnya terlihat di JSON."
Karena itu, Anda dapat mencoba JSON.Net untuk melakukan serialisasi. Saya tidak tahu apakah itu akan berhasil
sumber
Cara tercepat yang saya temukan adalah ini:
Namespace: System.Web.Script.Serialization.JavaScriptSerializer
sumber
Anda bisa menggunakan Newtonsoft.Json.
sumber
Dengan asumsi Anda menggunakan ini untuk layanan web, Anda bisa menerapkan atribut berikut ke kelas:
Kemudian atribut berikut untuk setiap metode yang harus mengembalikan Json:
Dan atur jenis pengembalian untuk metode menjadi "objek"
sumber
sumber