Apakah ada cara untuk menghapus konten JSON menjadi tipe dinamis C # 4? Akan menyenangkan untuk melewatkan membuat banyak kelas untuk menggunakan DataContractJsonSerializer.
Jika Anda menginginkan sesuatu yang 'dinamis', mengapa tidak hanya menggunakan accessor style get yang datang dengan sebagian besar decoder JSON yang tidak pergi ke objek biasa-lama? (misalnya apakah benar-benar diperlukan untuk pembuatan objek 'dinamis'?) json.org memiliki banyak tautan untuk implementasi C # JSON.
Saya sedang mengerjakan proyek yang mencoba untuk menjaga agar ketergantungan eksternal tetap minimum. Jadi, jika mungkin untuk sesuatu dengan stok .net serializers dan jenis yang akan disukai. Tentu saja jika itu tidak mungkin, saya akan memukul json.org. Terima kasih!
jswanson
42
Saya benar-benar terkejut tim C # menambahkan 'dinamis' tetapi kemudian tidak ada cara di CLR untuk mengubah objek JSON menjadi instance kelas CLR dinamis.
Frank Schwieterman
2
Sayangnya jawaban yang diterima tidak berfungsi di .NET 4 RTM. Saya memposting jawaban yang membantu saya menyelesaikan hal ini yang mungkin bermanfaat bagi orang lain.
Drew Noakes
(Walaupun tampaknya Newtonsoft JSON.NET cukup dekat. Namun, tidak ada contoh yang benar-benar bagus.)
Hot Licks
Jawaban:
659
Jika Anda senang memiliki ketergantungan pada System.Web.Helpersmajelis, maka Anda dapat menggunakan Jsonkelas:
dynamic data =Json.Decode(json);
Ini disertakan dengan kerangka kerja MVC sebagai unduhan tambahan untuk kerangka .NET 4. Pastikan memberi Vlad upvote jika itu membantu! Namun jika Anda tidak dapat menganggap lingkungan klien menyertakan DLL ini, maka baca terus.
Pendekatan deserialisasi alternatif disarankan di sini . Saya memodifikasi kode sedikit untuk memperbaiki bug dan sesuai dengan gaya pengkodean saya. Yang Anda butuhkan hanyalah kode ini dan referensi System.Web.Extensionsdari proyek Anda:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Dynamic;
using System.Linq;
using System.Text;
using System.Web.Script.Serialization;publicsealedclassDynamicJsonConverter:JavaScriptConverter{publicoverrideobjectDeserialize(IDictionary<string,object> dictionary,Type type,JavaScriptSerializer serializer){if(dictionary ==null)thrownewArgumentNullException("dictionary");return type ==typeof(object)?newDynamicJsonObject(dictionary):null;}publicoverrideIDictionary<string,object>Serialize(object obj,JavaScriptSerializer serializer){thrownewNotImplementedException();}publicoverrideIEnumerable<Type>SupportedTypes{get{returnnewReadOnlyCollection<Type>(newList<Type>(new[]{typeof(object)}));}}#region Nested type: DynamicJsonObjectprivatesealedclassDynamicJsonObject:DynamicObject{privatereadonlyIDictionary<string,object> _dictionary;publicDynamicJsonObject(IDictionary<string,object> dictionary){if(dictionary ==null)thrownewArgumentNullException("dictionary");
_dictionary = dictionary;}publicoverridestringToString(){var sb =newStringBuilder("{");ToString(sb);return sb.ToString();}privatevoidToString(StringBuilder sb){var firstInDictionary =true;foreach(var pair in _dictionary){if(!firstInDictionary)
sb.Append(",");
firstInDictionary =false;varvalue= pair.Value;var name = pair.Key;if(valueisstring){
sb.AppendFormat("{0}:\"{1}\"", name,value);}elseif(valueisIDictionary<string,object>){newDynamicJsonObject((IDictionary<string,object>)value).ToString(sb);}elseif(valueisArrayList){
sb.Append(name +":[");var firstInArray =true;foreach(var arrayValue in(ArrayList)value){if(!firstInArray)
sb.Append(",");
firstInArray =false;if(arrayValue isIDictionary<string,object>)newDynamicJsonObject((IDictionary<string,object>)arrayValue).ToString(sb);elseif(arrayValue isstring)
sb.AppendFormat("\"{0}\"", arrayValue);else
sb.AppendFormat("{0}", arrayValue);}
sb.Append("]");}else{
sb.AppendFormat("{0}:{1}", name,value);}}
sb.Append("}");}publicoverrideboolTryGetMember(GetMemberBinder binder,outobject result){if(!_dictionary.TryGetValue(binder.Name,out result)){// return null to avoid exception. caller can check for null this way...
result =null;returntrue;}
result =WrapResultObject(result);returntrue;}publicoverrideboolTryGetIndex(GetIndexBinder binder,object[] indexes,outobject result){if(indexes.Length==1&& indexes[0]!=null){if(!_dictionary.TryGetValue(indexes[0].ToString(),out result)){// return null to avoid exception. caller can check for null this way...
result =null;returntrue;}
result =WrapResultObject(result);returntrue;}returnbase.TryGetIndex(binder, indexes,out result);}privatestaticobjectWrapResultObject(object result){var dictionary = result asIDictionary<string,object>;if(dictionary !=null)returnnewDynamicJsonObject(dictionary);var arrayList = result asArrayList;if(arrayList !=null&& arrayList.Count>0){return arrayList[0]isIDictionary<string,object>?newList<object>(arrayList.Cast<IDictionary<string,object>>().Select(x =>newDynamicJsonObject(x))):newList<object>(arrayList.Cast<object>());}return result;}}#endregion}
Saya mendapatkan kesalahan dalam dynamic obj = serializer.Deserialize (json, typeof (objek)); mengatakan bahwa tidak ada kelebihan untuk metode dengan 2 argumen .. dll salah atau apa?
Stewie Griffin
32
Anda dapat menggunakan System.Web.Helpers.Json - ia menawarkan metode Decode yang mengembalikan objek dinamis. Saya juga memposting info ini sebagai jawaban.
Vlad Iliescu
2
Ini banyak membantu saya juga, tapi saya ingin tahu apa yang harus saya lakukan jika saya perlu menggunakan metode .Serialize, yang saat ini hanya melempar NotImplementedException ... Saya tidak terlalu akrab dengan kelas tertutup dan / atau abstrak yang diperluas kelas. Adakah yang bisa mengarahkan saya ke arah yang benar?
Cory W.
2
terkadang di js Anda memiliki bidang dengan karakter khusus seperti "warna latar belakang". Untuk mengakses bidang-bidang seperti itu di js, Anda melakukan obj ["background-color"]. Bagaimana saya bisa mengakses bidang tersebut dari c # setelah deserializing ke objek dinamis? Saya tidak bisa melakukan obj.background-color, tentu saja, dan obj ["background-color"] sepertinya tidak berfungsi. Akan lebih baik jika objek dinamis juga dapat diakses sebagai kamus, pada saat yang sama, persis seperti di js.
Radu Simionescu
2
@RaduSimionescu Saya mungkin agak terlambat, tapi mungkin ini membantu pengunjung masa depan. Saya memiliki masalah yang sama, hanya dengan nama-bidang params(yang merupakan kata kunci dalam C #). Selain TryGetMemberAnda dapat menimpa TryGetIndex, yang memberi Anda perilaku yang sama persis seperti di JS. Maka Anda bisa melakukan obj["params"]atau obj["background-color"]untuk nama bidang canggung.
@HotLicks: Untuk mengintrospeksi dinamika stufflakukan sesuatu seperti:foreach (Newtonsoft.Json.Linq.JProperty jproperty in stuff) { Console.WriteLine("jproperty.Name = {0}", jproperty.Name);}
Matthias
11
Apa perbedaan antara JsonConvert.DeserializeObject dan JObject.Parse? Jawabannya adalah menggunakan keduanya dengan cara yang sama untuk melakukan hal yang sama tetapi tidak menjelaskan perbedaannya.
cja
7
@ TomPeplow Mencoba ini. Itu tidak berhasil untuk saya. Dikatakan bahwa "JObject tidak mengimplementasikan 'Nama'".
Saya tidak bisa melakukan ini. Saya telah mempersempit masalah menjadi berada di dalam suatu asyncmetode. Jika saya membuat metode ini sinkron berfungsi seperti yang diharapkan. Namun, buat metode asyncdan saya tidak bisa mendapatkan dynamic, saya hanya mendapatkan object. Casting eksplisit tidak melakukan apa-apa, masih saja memberi saya object. Apakah ada orang lain yang mengalami ini?
codeConcussion
295
Anda dapat melakukan ini menggunakan System.Web.Helpers.Json - metode Decode-nya mengembalikan objek dinamis yang dapat Anda lintasi semau Anda.
Ini termasuk dalam perakitan System.Web.Helpers (.NET 4.0).
Sudahkah Anda mencoba ini? Ia kembali Dictionary<string,object>. Kecuali jika saya melewatkan sesuatu, contoh Anda tidak mengembalikan objek dinamis.
sergiopereira
18
Ini tidak berfungsi, itu hanya mengembalikan dict dalam bentuk dinamis
mattmanser
55
@Peter Long Saya percaya saya telah gagal menyatakan kasus saya dengan jelas, teman baik. Biarkan saya mencoba memperbaiki kesalahan saya. Saya tahu apa itu dinamika. Ini tidak memungkinkan Anda untuk memasukkan objek JSON dan menggunakan d.code, Anda harus melakukan d ["code"]. Nilai, yang bukan yang diinginkan kebanyakan orang menemukan jawaban ini, kami sudah tahu cara mendapatkan kamus dan mengubahnya menjadi dinamis adalah membuang-buang waktu. Dengan hormat saya tidak setuju, tuan.
mattmanser
4
@mattmanser we already know how to get the dictionary and casting it to a dynamic,. Tidak harus berupa kamus. Json juga memiliki daftar selain kamus. Dan juga daftar dan kamus bisa disarangkan. Kode saya dapat menangani semua situasi ini. TAPI metode Anda TIDAK BISA.
Peter Long
4
@mattmanser benar; dimungkinkan untuk mengimplementasikan IDynamicMetaObjectProvider(atau menggunakan mis. ExpandoObject) yang mampu mencegat properti dan mencarinya di kamus internal. Ini dikombinasikan dengan penggunaan dynamickode memungkinkan seperti yang d.codeakan digunakan. Agak ada gunanya melemparkan kamus ke dinamis.
Stephen Drew
78
"Data JSON string" sederhana ke objek tanpa file DLL pihak ketiga:
WebClient client =newWebClient();string getString = client.DownloadString("https://graph.facebook.com/zuck");JavaScriptSerializer serializer =newJavaScriptSerializer();dynamic item = serializer.Deserialize<object>(getString);string name = item["name"];//note: JavaScriptSerializer in this namespaces//System.Web.Script.Serialization.JavaScriptSerializer
Catatan: Anda juga dapat menggunakan objek kustom Anda.
Saya tidak mengerti. Ini adalah solusi yang paling sederhana dan tidak ada yang menyebutkannya.
cikatomo
2
ya itu sederhana :) kadang-kadang Anda perlu membuat serial tetapi tidak ingin menyertakan 3 bagian dll
İbrahim Özbölük
Dapatkah Anda menguraikan: bagaimana dinamis dapat mengakses objek deserialized melalui: myObject["myprop"]? Saya tahu ini dilakukan pada saat runtime tetapi bagaimana cara mengaksesnya melalui myObject["myprop"]valid?
Royi Namir
1
Anda dapat membatalkan deserialisasi objek Anda seperti Personel item = serializer.Deserialize <Personel> (getString); dan jika Anda menggunakan objek dinamis juga Anda dapat menggunakan array dan semuanya mungkin seperti objek setiap
İbrahim Özbölük
3
Untuk menggunakan namespace System.Web.Script.Serialization proyek Anda perlu referensi ke System.Web.Extensions.
Saya membuat versi baru dari DynamicJsonConverter yang menggunakan Objek Expando. Saya menggunakan objek expando, karena saya ingin serialisasi kembali dinamis ke JSON menggunakan Json.NET.
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Dynamic;
using System.Web.Script.Serialization;publicstaticclassDynamicJson{publicstaticdynamicParse(string json){JavaScriptSerializer jss =newJavaScriptSerializer();
jss.RegisterConverters(newJavaScriptConverter[]{newDynamicJsonConverter()});dynamic glossaryEntry = jss.Deserialize(json,typeof(object))asdynamic;return glossaryEntry;}classDynamicJsonConverter:JavaScriptConverter{publicoverrideobjectDeserialize(IDictionary<string,object> dictionary,Type type,JavaScriptSerializer serializer){if(dictionary ==null)thrownewArgumentNullException("dictionary");var result =ToExpando(dictionary);return type ==typeof(object)? result :null;}privatestaticExpandoObjectToExpando(IDictionary<string,object> dictionary){var result =newExpandoObject();var dic = result asIDictionary<String,object>;foreach(var item in dictionary){var valueAsDic = item.ValueasIDictionary<string,object>;if(valueAsDic !=null){
dic.Add(item.Key,ToExpando(valueAsDic));continue;}var arrayList = item.ValueasArrayList;if(arrayList !=null&& arrayList.Count>0){
dic.Add(item.Key,ToExpando(arrayList));continue;}
dic.Add(item.Key, item.Value);}return result;}privatestaticArrayListToExpando(ArrayList obj){ArrayList result =newArrayList();foreach(var item in obj){var valueAsDic = item asIDictionary<string,object>;if(valueAsDic !=null){
result.Add(ToExpando(valueAsDic));continue;}var arrayList = item asArrayList;if(arrayList !=null&& arrayList.Count>0){
result.Add(ToExpando(arrayList));continue;}
result.Add(item);}return result;}publicoverrideIDictionary<string,object>Serialize(object obj,JavaScriptSerializer serializer){thrownewNotImplementedException();}publicoverrideIEnumerable<Type>SupportedTypes{get{returnnewReadOnlyCollection<Type>(newList<Type>(new[]{typeof(object)}));}}}}
dynamic json =newJDynamic("{a:'abc'}");// json.a is a string "abc"dynamic json =newJDynamic("{a:3.1416}");// json.a is 3.1416mdynamic json =newJDynamic("{a:1}");// json.a isdynamic json =newJDynamic("[1,2,3]");/json.Length/json.Countis3// And you can use json[0]/ json[2] to get the elementsdynamic json =newJDynamic("{a:[1,2,3]}");//json.a.Length /json.a.Count is 3.// And you can use json.a[0]/ json.a[2] to get the elementsdynamic json =newJDynamic("[{b:1},{c:1}]");// json.Length/json.Count is 2.// And you can use the json[0].b/json[1].c to get the num.
Anda dapat memperluas JavaScriptSerializer untuk menyalin secara kamus kamus yang dibuat untuk memperluas objek (s) dan kemudian menggunakannya secara dinamis:
Maka Anda hanya perlu memiliki pernyataan menggunakan untuk namespace Anda mendefinisikan ekstensi di (pertimbangkan hanya mendefinisikan mereka di System.Web.Script.Serialization ... trik lain adalah tidak menggunakan namespace, maka Anda tidak perlu menggunakan pernyataan sama sekali) dan Anda dapat mengkonsumsinya seperti:
var serializer =newJavaScriptSerializer();varvalue= serializer.DeserializeDynamic("{ 'Name': 'Jon Smith', 'Address': { 'City': 'New York', 'State': 'NY' }, 'Age': 42 }");var name =(string)value.Name;// Jon Smithvar age =(int)value.Age;// 42var address =value.Address;var city =(string)address.City;// New Yorkvar state =(string)address.State;// NY
publicclassChild{publicstring name {get;set;}publicint age {get;set;}}publicclassPerson{publicstring name {get;set;}publicint age {get;set;}publicstring city {get;set;}publicList<Child>Childs{get;set;}}
Setelah itu saya menggunakan Newtonsoft.Json untuk mengisi kelas:
using Newtonsoft.Json;
namespace GitRepositoryCreator.Common{classJObjects{publicstaticstringGet(object p_object){returnJsonConvert.SerializeObject(p_object);}internalstatic T Get<T>(string p_object){returnJsonConvert.DeserializeObject<T>(p_object);}}}
Anda bisa menyebutnya seperti ini:
Person jsonClass =JObjects.Get<Person>(stringJson);string stringJson =JObjects.Get(jsonClass);
PS:
Jika nama variabel JSON Anda bukan nama C # yang valid (nama dimulai dengan $) Anda dapat memperbaikinya seperti ini:
Untuk itu saya akan menggunakan JSON.NET untuk melakukan parsing level rendah dari aliran JSON dan kemudian membangun hirarki objek dari instance ExpandoObjectkelas.
Ada terlalu banyak cara untuk memposting ulang semuanya di sini, dan bahkan kurang penting karena artikel itu memiliki lampiran dengan kunci / file sumber yang diperlukan.
Sekarang kita deserialize string TANPA mereferensikan kelas di atas:
var dyn =JsonConvert.DeserializeObject<JObject>(jsonAsFooString);JProperty propAge = dyn.Properties().FirstOrDefault(i=>i.Name=="Age");if(propAge !=null){int age =int.Parse(propAge.Value.ToString());Console.WriteLine("age="+ age);}//or as a one-liner:int myage =int.Parse(dyn.Properties().First(i=>i.Name=="Age").Value.ToString());
Atau jika Anda ingin masuk lebih dalam:
var propBar = dyn.Properties().FirstOrDefault(i=>i.Name=="Bar");if(propBar !=null){JObject o =(JObject)propBar.First();var propBDay = o.Properties().FirstOrDefault(i => i.Name=="BDay");if(propBDay !=null){DateTime bday =DateTime.Parse(propBDay.Value.ToString());Console.WriteLine("birthday="+ bday.ToString("MM/dd/yyyy"));}}//or as a one-liner:DateTime mybday =DateTime.Parse(((JObject)dyn.Properties().First(i=>i.Name=="Bar").First()).Properties().First(i=>i.Name=="BDay").Value.ToString());
Pendekatan ini memungkinkan untuk "melintasi" dokumen jSON, sehingga Anda dapat mengelola situasi di mana struktur JSON tidak diketahui atau variabel (misalnya, banyak API mengembalikan dokumen JSON yang sama sekali berbeda ketika terjadi kesalahan). Ada perpustakaan lain yang mengizinkan untuk melakukan itu, selain dari Newtonsoft.JSON (alias JSON.NET)?
Alex 75
4
Objek yang Anda inginkan DynamicJSONObject termasuk dalam System.Web.Helpers.dll dari paket Halaman Web ASP.NET, yang merupakan bagian dari WebMatrix.
Gunakan DataSet (C #) dengan JavaScript. Fungsi sederhana untuk membuat aliran JSON dengan input DataSet. Buat konten JSON seperti (dataset multi-tabel):
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;Container container =JsonConvert.Deserialize<Container>(jsonAsString,newExpandoObjectConverter());
var jsonString =(File.ReadAllText(Path.Combine(Directory.GetCurrentDirectory(),"delete_result.json")));var objects =JsonConvert.DeserializeObject<dynamic>(jsonString);foreach(var o in objects){Console.WriteLine($"{o.id.ToString()}");}
Jawaban:
Jika Anda senang memiliki ketergantungan pada
System.Web.Helpers
majelis, maka Anda dapat menggunakanJson
kelas:Ini disertakan dengan kerangka kerja MVC sebagai unduhan tambahan untuk kerangka .NET 4. Pastikan memberi Vlad upvote jika itu membantu! Namun jika Anda tidak dapat menganggap lingkungan klien menyertakan DLL ini, maka baca terus.
Pendekatan deserialisasi alternatif disarankan di sini . Saya memodifikasi kode sedikit untuk memperbaiki bug dan sesuai dengan gaya pengkodean saya. Yang Anda butuhkan hanyalah kode ini dan referensi
System.Web.Extensions
dari proyek Anda:Anda bisa menggunakannya seperti ini:
Jadi, diberi string JSON:
Kode berikut akan berfungsi saat runtime:
sumber
params
(yang merupakan kata kunci dalam C #). SelainTryGetMember
Anda dapat menimpaTryGetIndex
, yang memberi Anda perilaku yang sama persis seperti di JS. Maka Anda bisa melakukanobj["params"]
atauobj["background-color"]
untuk nama bidang canggung.Ini cukup sederhana menggunakan Json.NET :
Juga
using Newtonsoft.Json.Linq
:Dokumentasi: Meminta JSON dengan dinamis
sumber
stuff
lakukan sesuatu seperti:foreach (Newtonsoft.Json.Linq.JProperty jproperty in stuff) { Console.WriteLine("jproperty.Name = {0}", jproperty.Name);}
async
metode. Jika saya membuat metode ini sinkron berfungsi seperti yang diharapkan. Namun, buat metodeasync
dan saya tidak bisa mendapatkandynamic
, saya hanya mendapatkanobject
. Casting eksplisit tidak melakukan apa-apa, masih saja memberi sayaobject
. Apakah ada orang lain yang mengalami ini?Anda dapat melakukan ini menggunakan System.Web.Helpers.Json - metode Decode-nya mengembalikan objek dinamis yang dapat Anda lintasi semau Anda.
Ini termasuk dalam perakitan System.Web.Helpers (.NET 4.0).
sumber
.NET 4.0 memiliki perpustakaan bawaan untuk melakukan ini:
Ini adalah cara paling sederhana.
sumber
Dictionary<string,object>
. Kecuali jika saya melewatkan sesuatu, contoh Anda tidak mengembalikan objek dinamis.we already know how to get the dictionary and casting it to a dynamic
,. Tidak harus berupa kamus. Json juga memiliki daftar selain kamus. Dan juga daftar dan kamus bisa disarangkan. Kode saya dapat menangani semua situasi ini. TAPI metode Anda TIDAK BISA.IDynamicMetaObjectProvider
(atau menggunakan mis.ExpandoObject
) yang mampu mencegat properti dan mencarinya di kamus internal. Ini dikombinasikan dengan penggunaandynamic
kode memungkinkan seperti yangd.code
akan digunakan. Agak ada gunanya melemparkan kamus ke dinamis."Data JSON string" sederhana ke objek tanpa file DLL pihak ketiga:
Catatan: Anda juga dapat menggunakan objek kustom Anda.
sumber
myObject["myprop"]
? Saya tahu ini dilakukan pada saat runtime tetapi bagaimana cara mengaksesnya melaluimyObject["myprop"]
valid?JsonFx dapat menghapus konten JSON menjadi objek dinamis.
sumber
Saya membuat versi baru dari DynamicJsonConverter yang menggunakan Objek Expando. Saya menggunakan objek expando, karena saya ingin serialisasi kembali dinamis ke JSON menggunakan Json.NET.
sumber
Cara lain menggunakan Newtonsoft.Json :
sumber
Anda dapat mencapainya dengan bantuan Newtonsoft.Json. Instal Newtonsoft.Json dari Nuget dan:
sumber
Cara paling sederhana adalah:
Cukup sertakan file DLL ini .
Gunakan kode seperti ini:
sumber
Anda dapat memperluas JavaScriptSerializer untuk menyalin secara kamus kamus yang dibuat untuk memperluas objek (s) dan kemudian menggunakannya secara dinamis:
Maka Anda hanya perlu memiliki pernyataan menggunakan untuk namespace Anda mendefinisikan ekstensi di (pertimbangkan hanya mendefinisikan mereka di System.Web.Script.Serialization ... trik lain adalah tidak menggunakan namespace, maka Anda tidak perlu menggunakan pernyataan sama sekali) dan Anda dapat mengkonsumsinya seperti:
sumber
Kamu bisa menggunakan
using Newtonsoft.Json
resolvedEvent.Event.Data
adalah tanggapan saya dari memanggil Acara inti.sumber
Saya menggunakan http://json2csharp.com/ untuk mendapatkan kelas yang mewakili objek JSON.
Memasukkan:
Keluaran:
Setelah itu saya menggunakan Newtonsoft.Json untuk mengisi kelas:
Anda bisa menyebutnya seperti ini:
PS:
Jika nama variabel JSON Anda bukan nama C # yang valid (nama dimulai dengan
$
) Anda dapat memperbaikinya seperti ini:sumber
Untuk itu saya akan menggunakan JSON.NET untuk melakukan parsing level rendah dari aliran JSON dan kemudian membangun hirarki objek dari instance
ExpandoObject
kelas.sumber
Saya menggunakan seperti ini dalam kode saya dan itu berfungsi dengan baik
sumber
Lihatlah artikel yang saya tulis di CodeProject, yang menjawab pertanyaan dengan tepat:
Jenis dinamis dengan JSON.NET
Ada terlalu banyak cara untuk memposting ulang semuanya di sini, dan bahkan kurang penting karena artikel itu memiliki lampiran dengan kunci / file sumber yang diperlukan.
sumber
Pilihan lain adalah "Tempel JSON sebagai kelas" sehingga dapat di-deserialisasikan dengan cepat dan mudah.
Berikut adalah penjelasan yang lebih baik dan piccas ... 'Tempel JSON Sebagai Kelas' di ASP.NET dan Web Tools 2012.2 RC
sumber
Deserializing di JSON.NET bisa dinamis menggunakan
JObject
kelas, yang termasuk dalam perpustakaan itu. String JSON saya mewakili kelas-kelas ini:Sekarang kita deserialize string TANPA mereferensikan kelas di atas:
Atau jika Anda ingin masuk lebih dalam:
Lihat posting untuk contoh lengkap.
sumber
Objek yang Anda inginkan DynamicJSONObject termasuk dalam System.Web.Helpers.dll dari paket Halaman Web ASP.NET, yang merupakan bagian dari WebMatrix.
sumber
Ada perpustakaan JSON ringan untuk C # disebut SimpleJson .
Ini mendukung. NET 3.5+, Silverlight dan Windows Phone 7.
Ini mendukung dinamis untuk .NET 4.0
Itu juga dapat diinstal sebagai paket NuGet
sumber
Gunakan DataSet (C #) dengan JavaScript. Fungsi sederhana untuk membuat aliran JSON dengan input DataSet. Buat konten JSON seperti (dataset multi-tabel):
Hanya sisi klien, gunakan eval. Sebagai contoh,
Kemudian gunakan:
sumber
Untuk mendapatkan ExpandoObject:
sumber
Coba ini:
sumber
Cara mengurai konten JSON mudah dengan dynamic & JavaScriptSerializer
Silakan tambahkan referensi System.Web.Extensions dan tambahkan namespace ini
using System.Web.Script.Serialization;
di atas:Cara mengurai json yang bersarang & kompleks dengan dinamis & JavaScriptSerializer
Silakan tambahkan referensi System.Web.Extensions dan tambahkan namespace ini
using System.Web.Script.Serialization;
di atas:sumber
Dengan Cinchoo ETL - pustaka sumber terbuka yang tersedia untuk mengurai JSON menjadi objek dinamis:
Keluaran:
Penafian: Saya penulis perpustakaan ini.
sumber
coba cara ini!
Contoh JSON:
Kode C #:
sumber