Mencoba untuk mengkonversi string JSON ke sebuah objek di dalam C#. Menggunakan yang benar-benar sederhana test case:
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
object routes_list = json_serializer.DeserializeObject("{ \"test\":\"some data\" }");
Masalahnya adalah bahwa routes_list tidak pernah mendapat ditetapkan; it's undefined objek. Ada ide?
Atau, anda dapat menggunakan Newtownsoft.Json library sebagai berikut:
using Newtonsoft.Json;
...
var result = JsonConvert.DeserializeObject<T>(json);
Di mana T
adalah jenis objek yang cocok dengan JSON string.
Sepertinya anda're berusaha secara untuk baku objek. Anda bisa membuat Kelas yang mewakili objek yang anda're mengkonversi ke. Ini akan sangat berguna dalam kasus di mana anda're berhadapan dengan objek yang lebih besar atau JSON String.
Misalnya:
class Test {
String test;
String getTest() { return test; }
void setTest(String test) { this.test = test; }
}
Kemudian anda deserialization kode akan sama:
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
Test routes_list =
(Test)json_serializer.DeserializeObject("{ \"test\":\"some data\" }");
Informasi lebih lanjut dapat ditemukan dalam tutorial ini: http://www.codeproject.com/Tips/79435/Deserialize-JSON-with-Csharp.aspx
Mungkin anda don't hanya ingin menyatakan routes_list sebagai objek
jenis. Itu doesn't memiliki .uji properti, sehingga anda benar-benar tidak't akan mendapatkan kembali benda. Ini adalah salah satu tempat di mana anda akan lebih baik mendefinisikan sebuah class atau struct, atau menggunakan kata kunci dinamis.
Jika anda benar-benar ingin kode ini untuk bekerja anda memiliki itu, anda'll perlu tahu bahwa objek yang dikembalikan oleh DeserializeObject generik kamus string,objek. Berikut ini's kode untuk melakukannya dengan cara itu:
var json_serializer = new JavaScriptSerializer();
var routes_list = (IDictionary<string, object>)json_serializer.DeserializeObject("{ \"test\":\"some data\" }");
Console.WriteLine(routes_list["test"]);
Jika anda ingin menggunakan kata kunci dinamis, anda bisa baca caranya di sini.
Jika anda mendeklarasikan sebuah class atau struct, anda dapat menghubungi Deserialize bukan DeserializeObject seperti:
class MyProgram {
struct MyObj {
public string test { get; set; }
}
static void Main(string[] args) {
var json_serializer = new JavaScriptSerializer();
MyObj routes_list = json_serializer.Deserialize<MyObj>("{ \"test\":\"some data\" }");
Console.WriteLine(routes_list.test);
Console.WriteLine("Done...");
Console.ReadKey(true);
}
}
Menggunakan objek dinamis dengan JavaScriptSerializer.
JavaScriptSerializer serializer = new JavaScriptSerializer();
dynamic item = serializer.Deserialize<object>("{ \"test\":\"some data\" }");
string test= item["test"];
//test Result = "some data"
Newtonsoft lebih cepat dari java script serializer. ... yang satu ini tergantung pada Newtonsoft NuGet package, yang lebih populer dan lebih baik dari default serializer.
satu baris kode solusi.
var myclass = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(Jsonstring);
Myclass oMyclass = Newtonsoft.Json.JsonConvert.DeserializeObject<Myclass>(Jsonstring);
Berikut ini's sederhana kelas I dirakit dari berbagai posting.... It's telah diuji selama sekitar 15 menit, tapi sepertinya bekerja untuk tujuan saya. Menggunakan JavascriptSerializer
untuk melakukan pekerjaan, yang dapat dirujuk dalam aplikasi anda menggunakan info rinci di posting ini.
Kode di bawah ini dapat dijalankan di LinqPad untuk menguji it out:
Semoga membantu!
void Main()
{
string json = @"
{
'glossary':
{
'title': 'example glossary',
'GlossDiv':
{
'title': 'S',
'GlossList':
{
'GlossEntry':
{
'ID': 'SGML',
'ItemNumber': 2,
'SortAs': 'SGML',
'GlossTerm': 'Standard Generalized Markup Language',
'Acronym': 'SGML',
'Abbrev': 'ISO 8879:1986',
'GlossDef':
{
'para': 'A meta-markup language, used to create markup languages such as DocBook.',
'GlossSeeAlso': ['GML', 'XML']
},
'GlossSee': 'markup'
}
}
}
}
}
";
var d = new JsonDeserializer(json);
d.GetString("glossary.title").Dump();
d.GetString("glossary.GlossDiv.title").Dump();
d.GetString("glossary.GlossDiv.GlossList.GlossEntry.ID").Dump();
d.GetInt("glossary.GlossDiv.GlossList.GlossEntry.ItemNumber").Dump();
d.GetObject("glossary.GlossDiv.GlossList.GlossEntry.GlossDef").Dump();
d.GetObject("glossary.GlossDiv.GlossList.GlossEntry.GlossDef.GlossSeeAlso").Dump();
d.GetObject("Some Path That Doesnt Exist.Or.Another").Dump();
}
// Define other methods and classes here
public class JsonDeserializer
{
private IDictionary<string, object> jsonData { get; set; }
public JsonDeserializer(string json)
{
var json_serializer = new JavaScriptSerializer();
jsonData = (IDictionary<string, object>)json_serializer.DeserializeObject(json);
}
public string GetString(string path)
{
return (string) GetObject(path);
}
public int? GetInt(string path)
{
int? result = null;
object o = GetObject(path);
if (o == null)
{
return result;
}
if (o is string)
{
result = Int32.Parse((string)o);
}
else
{
result = (Int32) o;
}
return result;
}
public object GetObject(string path)
{
object result = null;
var curr = jsonData;
var paths = path.Split('.');
var pathCount = paths.Count();
try
{
for (int i = 0; i < pathCount; i++)
{
var key = paths[i];
if (i == (pathCount - 1))
{
result = curr[key];
}
else
{
curr = (IDictionary<string, object>)curr[key];
}
}
}
catch
{
// Probably means an invalid path (ie object doesn't exist)
}
return result;
}
}
Anda dapat dicapai kebutuhan anda dengan mudah dengan menggunakan Newtonsoft.Json library. Saya menuliskan salah satu contoh di bawah ini memiliki melihat ke dalamnya.
Kelas untuk jenis objek yang anda terima:
public class User
{
public int ID { get; set; }
public string Name { get; set; }
}
Kode:
static void Main(string[] args)
{
string json = "{\"ID\": 1, \"Name\": \"Abdullah\"}";
User user = JsonConvert.DeserializeObject<User>(json);
Console.ReadKey();
}
ini adalah cara yang sangat sederhana untuk parse json anda.
Sebagai tripletdad99 kata
var result = JsonConvert.DeserializeObject<T>(json);
tapi jika anda don't ingin membuat tambahan objek anda dapat membuatnya dengan Kamus
sebaliknya
var result = JsonConvert.DeserializeObject<Dictionary<string, string>>(json_serializer);
tambahkan ini ddl untuk referensi untuk proyek anda: System.Web.Extensions.dll
menggunakan namespace ini: menggunakan Sistem.Web.Script.Serialisasi;
public class IdName
{
public int Id { get; set; }
public string Name { get; set; }
}
string jsonStringSingle = "{'Id': 1, 'Name':'Thulasi Ram.S'}".Replace("'", "\"");
var entity = new JavaScriptSerializer().Deserialize<IdName>(jsonStringSingle);
string jsonStringCollection = "[{'Id': 2, 'Name':'Thulasi Ram.S'},{'Id': 2, 'Name':'Raja Ram.S'},{'Id': 3, 'Name':'Ram.S'}]".Replace("'", "\"");
var collection = new JavaScriptSerializer().Deserialize<IEnumerable<IdName>>(jsonStringCollection);
Copy Json anda dan paste di textbox pada json2csharp dan klik pada tombol Generate.
A cs kelas akan dihasilkan menggunakan cs file seperti di bawah ini
var generatedcsResponce = JsonConvert.DeserializeObject(yourJson);
Di mana RootObject
adalah nama yang dihasilkan cs file;
Lain cara yang mudah dan cepat untuk semi-otomatis langkah ini adalah untuk:
Sekarang menggunakan kode seperti:
WebClient client = new WebClient();
string myJSON = client.DownloadString("https://URL_FOR_JSON.com/JSON_STUFF");
var myClass = Newtonsoft.Json.JsonConvert.DeserializeObject(myJSON);
Pertama, anda harus memiliki perpustakaan seperti:
using System.Runtime.Serialization.Json;
DataContractJsonSerializer desc = new DataContractJsonSerializer(typeof(BlogSite));
string json = "{\"Description\":\"Share knowledge\",\"Name\":\"zahid\"}";
using (var ms = new MemoryStream(ASCIIEncoding.ASCII.GetBytes(json)))
{
BlogSite b = (BlogSite)desc.ReadObject(ms);
Console.WriteLine(b.Name);
Console.WriteLine(b.Description);
}
Mengkonversi string JSON ke sebuah objek di dalam C#. Menggunakan di bawah ini test case.. yang bekerja untuk saya. Di sini "MenuInfo" saya kelas C# objek.
JsonTextReader reader = null;
try
{
WebClient webClient = new WebClient();
JObject result = JObject.Parse(webClient.DownloadString("YOUR URL"));
reader = new JsonTextReader(new System.IO.StringReader(result.ToString()));
reader.SupportMultipleContent = true;
}
catch(Exception)
{}
JsonSerializer serializer = new JsonSerializer();
MenuInfo menuInfo = serializer.Deserialize<MenuInfo>(reader);