Saya ingin mengonversi Dictionary<int,List<int>>
string saya ke JSON. Adakah yang tahu cara mencapai ini di C #?
c#
json
dictionary
daehaai
sumber
sumber
Jawaban:
Menialisasi struktur data yang hanya berisi nilai numerik atau boolean cukup mudah. Jika Anda tidak memiliki banyak serialisasi, Anda dapat menulis metode untuk tipe spesifik Anda.
Untuk
Dictionary<int, List<int>>
seperti yang telah Anda tentukan, Anda dapat menggunakan Linq:Tetapi, jika Anda membuat serial beberapa kelas yang berbeda, atau struktur data yang lebih kompleks, atau terutama jika data Anda berisi nilai string , Anda akan lebih baik menggunakan perpustakaan JSON yang memiliki reputasi baik yang sudah tahu bagaimana menangani hal-hal seperti karakter pelarian dan pemisah baris. Json.NET adalah opsi yang populer.
sumber
Jawaban ini menyebutkan Json.NET tetapi berhenti memberi tahu Anda bagaimana Anda dapat menggunakan Json.NET untuk membuat serialisasi kamus:
Berbeda dengan JavaScriptSerializer,
myDictionary
tidak harus menjadi kamus tipe<string, string>
untuk JsonConvert agar berfungsi.sumber
Json.NET mungkin membuat serialisasi kamus C # dengan memadai sekarang, tetapi ketika OP awalnya memposting pertanyaan ini, banyak pengembang MVC mungkin telah menggunakan kelas JavaScriptSerializer karena itu adalah opsi default di luar kotak.
Jika Anda sedang mengerjakan proyek lawas (MVC 1 atau MVC 2), dan Anda tidak dapat menggunakan Json.NET, saya sarankan Anda menggunakan
List<KeyValuePair<K,V>>
bukanDictionary<K,V>>
. Kelas JavaScriptSerializer lama akan membuat serialisasi jenis ini dengan baik, tetapi akan memiliki masalah dengan kamus.Dokumentasi: Melakukan Serialisasi Koleksi dengan Json.NET
sumber
Ini akan menulis ke konsol:
sumber
Jawaban Satu Baris Sederhana
(
using System.Web.Script.Serialization
)Kode ini akan mengonversi apa saja
Dictionary<Key,Value>
menjadiDictionary<string,string>
dan kemudian membuat serial sebagai string JSON:Penting untuk dicatat bahwa sesuatu seperti
Dictionary<int, MyClass>
juga dapat diserialisasi dengan cara ini sambil mempertahankan tipe / objek yang kompleks.Penjelasan (gangguan)
Anda dapat mengganti variabel
yourDictionary
dengan variabel aktual Anda.Kami melakukan ini, karena Kunci dan Nilai harus bertipe string, sebagai persyaratan untuk serialisasi a
Dictionary
.sumber
System.Web.Extensions
itu bukan dalam versi Kerangka Klien, tetapi membutuhkan versi lengkap juga.Maaf jika sintaksnya adalah bit terkecil, tetapi kode yang saya peroleh berasal dari VB :)
sumber
Di Asp.net Core, gunakan:
sumber
System.Core
dan kemudian mencoba referensiusing Newtonsoft.Json
dan tidak ada sukacita. Saya pikirNewtonsoft
adalah perpustakaan pihak ke-3.Anda bisa menggunakan
System.Web.Script.Serialization.JavaScriptSerializer
:sumber
Berikut cara melakukannya hanya menggunakan pustaka .Net standar dari Microsoft ...
sumber
Dictionary<string, dynamic>
dan memiliki semua tipe primitif JSON seperti intergers, float, boolean, string, bahkan nulls dan dalam satu objek. +1Anda bisa menggunakan JavaScriptSerializer .
sumber
string
. Saya telah mengirim jawaban di sini yang mencakup itu, jika Anda ingin melihatnya.Tampaknya banyak perpustakaan berbeda dan apa yang tampaknya tidak datang dan pergi tahun-tahun sebelumnya. Namun pada April 2016, solusi ini bekerja dengan baik untuk saya. String mudah diganti oleh int .
TL / DR; Salin ini jika Anda datang ke sini untuk:
Dua poin impor. Pertama, pastikan untuk menambahkan System.Runtime.Serliazation sebagai referensi dalam proyek Anda di dalam Visual Studio's Solution Explorer. Kedua, tambahkan baris ini,
di bagian atas file dengan sisa usings Anda, sehingga
DataContractJsonSerializer
kelas dapat ditemukan. Posting blog ini memiliki informasi lebih lanjut tentang metode serialisasi ini.Format Data (Input / Output)
Data saya adalah kamus dengan 3 string, masing-masing menunjuk ke daftar string. Daftar string memiliki panjang 3, 4, dan 1. Data terlihat seperti ini:
Output yang ditulis ke file akan berada pada satu baris, berikut adalah output yang diformat:
sumber
Ini mirip dengan apa yang diposting Meritt sebelumnya. hanya memposting kode lengkap
sumber
Jika konteks Anda mengizinkannya (kendala teknis, dll.), Gunakan
JsonConvert.SerializeObject
metode dari Newtonsoft.Json : itu akan membuat hidup Anda lebih mudah.sumber