Saya punya kode berikut:
var user = (Dictionary<string, object>)serializer.DeserializeObject(responsecontent);
Masukan dalam responsecontent
adalah JSON, tapi itu tidak benar diurai menjadi sebuah objek. Bagaimana saya harus benar deserialize?
Saya asumsi anda tidak menggunakan Json.NET (Newtonsoft.Json NuGet package). Jika ini terjadi, maka anda harus mencobanya.
Ini memiliki fitur berikut:
Lihat contoh di bawah ini. Dalam contoh ini, JsonConvert
kelas ini digunakan untuk mengkonversi suatu objek ke dan dari JSON. Ini memiliki dua metode statis untuk tujuan ini. Mereka SerializeObject(Object obj)
dan DeserializeObject<T>(String json)
:
Product product = new Product();
product.Name = "Apple";
product.Expiry = new DateTime(2008, 12, 28);
product.Price = 3.99M;
product.Sizes = new string[] { "Small", "Medium", "Large" };
string json = JsonConvert.SerializeObject(product);
//{
// "Name": "Apple",
// "Expiry": "2008-12-28T00:00:00",
// "Price": 3.99,
// "Sizes": [
// "Small",
// "Medium",
// "Large"
// ]
//}
Product deserializedProduct = JsonConvert.DeserializeObject<Product>(json);
Seperti yang telah dijawab di sini - Deserialize JSON ke C# objek dinamis?
It's cukup sederhana menggunakan Json.NET:
dynamic stuff = JsonConvert.DeserializeObject("{ 'Name': 'Jon Smith', 'Address': { 'City': 'New York', 'State': 'NY' }, 'Age': 42 }");
string name = stuff.Name;
string address = stuff.Address.City;
Atau menggunakan Newtonsoft.Json.Linq :
dynamic stuff = JObject.Parse("{ 'Name': 'Jon Smith', 'Address': { 'City': 'New York', 'State': 'NY' }, 'Age': 42 }");
string name = stuff.Name;
string address = stuff.Address.City;
Berikut adalah beberapa pilihan tanpa menggunakan perpustakaan pihak ketiga:
// For that you will need to add reference to System.Runtime.Serialization
var jsonReader = JsonReaderWriterFactory.CreateJsonReader(Encoding.UTF8.GetBytes(@"{ ""Name"": ""Jon Smith"", ""Address"": { ""City"": ""New York"", ""State"": ""NY"" }, ""Age"": 42 }"), new System.Xml.XmlDictionaryReaderQuotas());
// For that you will need to add reference to System.Xml and System.Xml.Linq
var root = XElement.Load(jsonReader);
Console.WriteLine(root.XPathSelectElement("//Name").Value);
Console.WriteLine(root.XPathSelectElement("//Address/State").Value);
// For that you will need to add reference to System.Web.Helpers
dynamic json = System.Web.Helpers.Json.Decode(@"{ ""Name"": ""Jon Smith"", ""Address"": { ""City"": ""New York"", ""State"": ""NY"" }, ""Age"": 42 }");
Console.WriteLine(json.Name);
Console.WriteLine(json.Address.State);
Lihat link untuk informasi lebih lanjut tentang Sistem.Web.Pembantu.Json.
Update: Saat ini cara termudah untuk mendapatkan Web.Pembantu
adalah dengan menggunakan NuGet package.
Jika anda don't peduli tentang awal versi windows anda dapat menggunakan kelas-kelas dari Windows.Data.Json
namespace:
// minimum supported version: Win 8
JsonObject root = Windows.Data.Json.JsonValue.Parse(jsonString).GetObject();
Console.WriteLine(root["Name"].GetString());
Console.WriteLine(root["Address"].GetObject()["State"].GetString());
Jika .NET 4 tersedia untuk anda, check out: http://visitmix.com/writings/the-rise-of-json (archive.org)
Berikut adalah cuplikan dari situs tersebut:
WebClient webClient = new WebClient();
dynamic result = JsonValue.Parse(webClient.DownloadString("https://api.foursquare.com/v2/users/self?oauth_token=XXXXXXX"));
Console.WriteLine(result.response.user.firstName);
Yang terakhir Konsol.WriteLine cukup manis...
Lain asli solusi untuk ini, yang doesn't memerlukan perpustakaan pihak ke-3 tapi referensi Sistem.Web.Ekstensi adalah JavaScriptSerializer. Ini bukan baru tapi sangat tidak diketahui fitur built-in yang ada sejak 3.5.
using System.Web.Script.Serialization;
..
JavaScriptSerializer serializer = new JavaScriptSerializer();
objectString = serializer.Serialize(new MyObject());
dan kembali
MyObject o = serializer.Deserialize<MyObject>(objectString)
Sistem.Json bekerja sekarang...
Menginstal nuget https://www.nuget.org/packages/System.Json
PM> Install-Package System.Json -Version 4.5.0
Contoh:
// PM>Install-Package System.Json -Version 4.5.0
using System;
using System.Json;
namespace NetCoreTestConsoleApp
{
class Program
{
static void Main(string[] args)
{
// Note that JSON keys are case sensitive, a is not same as A.
// JSON Sample
string jsonString = "{\"a\": 1,\"b\": \"string value\",\"c\":[{\"Value\": 1}, {\"Value\": 2,\"SubObject\":[{\"SubValue\":3}]}]}";
// You can use the following line in a beautifier/JSON formatted for better view
// {"a": 1,"b": "string value","c":[{"Value": 1}, {"Value": 2,"SubObject":[{"SubValue":3}]}]}
/* Formatted jsonString for viewing purposes:
{
"a":1,
"b":"string value",
"c":[
{
"Value":1
},
{
"Value":2,
"SubObject":[
{
"SubValue":3
}
]
}
]
}
*/
// Verify your JSON if you get any errors here
JsonValue json = JsonValue.Parse(jsonString);
// int test
if (json.ContainsKey("a"))
{
int a = json["a"]; // type already set to int
Console.WriteLine("json[\"a\"]" + " = " + a);
}
// string test
if (json.ContainsKey("b"))
{
string b = json["b"]; // type already set to string
Console.WriteLine("json[\"b\"]" + " = " + b);
}
// object array test
if (json.ContainsKey("c") && json["c"].JsonType == JsonType.Array)
{
// foreach loop test
foreach (JsonValue j in json["c"])
{
Console.WriteLine("j[\"Value\"]" + " = " + j["Value"].ToString());
}
// multi level key test
Console.WriteLine("json[\"c\"][0][\"Value\"]" + " = " + json["c"][0]["Value"].ToString());
Console.WriteLine("json[\"c\"][0][\"Value\"]" + " = " + json["c"][1]["Value"].ToString());
Console.WriteLine("json[\"c\"][1][\"SubObject\"][0][\"SubValue\"]" + " = " + json["c"][1]["SubObject"][0]["SubValue"].ToString());
}
Console.WriteLine();
Console.Write("Press any key to exit.");
Console.ReadKey();
}
}
}
Gunakan alat ini untuk menghasilkan kelas yang berbasis di json:
Dan kemudian menggunakan kelas untuk deserialize json anda. Contoh:
public class Account
{
public string Email { get; set; }
public bool Active { get; set; }
public DateTime CreatedDate { get; set; }
public IList<string> Roles { get; set; }
}
string json = @"{
'Email': '[email protected]',
'Active': true,
'CreatedDate': '2013-01-20T00:00:00Z',
'Roles': [
'User',
'Admin'
]
}";
Account account = JsonConvert.DeserializeObject<Account>(json);
Console.WriteLine(account.Email);
// [email protected]
Referensi: https://forums.asp.net/t/1992996.aspx?Nested+Json+Deserialization+untuk+C+objek+dan+menggunakan+yang+objek https://www.newtonsoft.com/json/help/html/DeserializeObject.htm
Cobalah kode berikut:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("URL");
JArray array = new JArray();
using (var twitpicResponse = (HttpWebResponse)request.GetResponse())
using (var reader = new StreamReader(twitpicResponse.GetResponseStream()))
{
JavaScriptSerializer js = new JavaScriptSerializer();
var objText = reader.ReadToEnd();
JObject joResponse = JObject.Parse(objText);
JObject result = (JObject)joResponse["result"];
array = (JArray)result["Detail"];
string statu = array[0]["dlrStat"].ToString();
}
Berikut ini dari baca situs yang harus saya pikir membantu menyediakan beberapa fungsi asli untuk apa yang anda cari. Perhatikan hal ini ditentukan untuk Windows 8. Salah satu contoh dari situs ini tercantum di bawah ini.
JsonValue jsonValue = JsonValue.Parse("{\"Width\": 800, \"Height\": 600, \"Title\": \"View from 15th Floor\", \"IDs\": [116, 943, 234, 38793]}");
double width = jsonValue.GetObject().GetNamedNumber("Width");
double height = jsonValue.GetObject().GetNamedNumber("Height");
string title = jsonValue.GetObject().GetNamedString("Title");
JsonArray ids = jsonValue.GetObject().GetNamedArray("IDs");
Ini menggunakan Windows.Data.JSON namespace.
Saya pikir jawaban terbaik yang saya've terlihat telah @MD_Sayem_Ahmed.
Pertanyaan anda adalah "Bagaimana saya bisa mem-parse Json dengan C#", tapi sepertinya anda menginginkan untuk memecahkan kode Json. Jika anda ingin memecahkan kode itu, Ahmed's jawaban yang lebih baik.
Jika anda mencoba untuk mencapai hal ini dalam ASP.NET Web Api, cara termudah adalah dengan membuat transfer data objek yang menyimpan data yang ingin anda tetapkan:
public class MyDto{
public string Name{get; set;}
public string Value{get; set;}
}
Anda cukup menambahkan application/json header permintaan anda (jika anda menggunakan Fiddler, misalnya). Anda kemudian akan menggunakan ini dalam ASP.NET Web API sebagai berikut:
//controller method -- assuming you want to post and return data
public MyDto Post([FromBody] MyDto myDto){
MyDto someDto = myDto;
/*ASP.NET automatically converts the data for you into this object
if you post a json object as follows:
{
"Name": "SomeName",
"Value": "SomeValue"
}
*/
//do some stuff
}
Ini banyak membantu saya ketika saya sedang bekerja di Web saya Api dan membuat hidup saya yang super mudah.
string json = @"{
'Name': 'Wide Web',
'Url': 'www.wideweb.com.br'}";
JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
dynamic j = jsonSerializer.Deserialize<dynamic>(json);
string name = j["Name"].ToString();
string url = j["Url"].ToString();
.net core 3.0 dilengkapi dengan Sistem.Teks.Json
built-in yang berarti anda sekarang dapat deserialize/cerita bersambung JSON tanpa menggunakan pihak ketiga perpustakaan.
Cerita bersambung kelas(es) untuk string JSON:
var json = JsonSerializer.Serialize(order);
Untuk deserialize JSON menjadi sangat diketik kelas:
var order = JsonSerializer.Deserialize<Order>(json);
Jadi jika anda memiliki kelas seperti di bawah ini:
public class Order
{
public int Id { get; set; }
public string OrderNumber { get; set; }
public decimal Balance { get; set; }
public DateTime Opened { get; set; }
}
var json = JsonSerializer.Serialize(order);
// creates JSON ==>
{
"id": 123456,
"orderNumber": "ABC-123-456",
"balance": 9876.54,
"opened": "2019-10-21T23:47:16.85",
};
var order = JsonSerializer.Deserialize<Order>(json);
// ==> creates the above class
Satu hal yang perlu diperhatikan adalah bahwa Sistem.Teks.Json
tidak secara otomatis menangani camelCase
JSON sifat ketika menggunakan kode anda sendiri (namun, tidak ketika menggunakan MVC/WebAPI permintaan dan model pengikat).
Jadi jika anda memiliki JSON seperti di bawah ini dan Order
seperti di atas maka tidak akan deserialize ke kelas anda.
var json = @"{
""id"": 123456,
""orderNumber"": ""ABC-123-456"",
""balance"": 9876.54,
""opened"": ""2019-10-21T23:47:16.8513874+01:00"",
}";
Untuk mengatasi ini, anda perlu untuk lulus JsonSerializerOptions
sebagai parameter (sayangnya, it's tidak mungkin untuk mengkonfigurasi aplikasi ini lebar).
JsonSerializerOptions options = new JsonSerializerOptions
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase, // set camelCase
WriteIndented = true // write pretty json
};
// serialize using options
var json = JsonSerializer.Serialize(order, options);
// deserialize using options
var order = JsonSerializer.Deserialize<Order>(json, options);
Sistem.Teks.Json
ini juga tersedia untuk .Net Framework dan .Net Standar sebagai Nu-dapatkan paket Sistem.Teks.Json
var result = controller.ActioName(objParams);
IDictionary<string, object> data = (IDictionary<string, object>)new System.Web.Routing.RouteValueDictionary(result.Data);
Assert.AreEqual("Table already exists.", data["Message"]);
using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(user)))
{
// Deserialization from JSON
DataContractJsonSerializer deserializer = new DataContractJsonSerializer(typeof(UserListing))
DataContractJsonSerializer(typeof(UserListing));
UserListing response = (UserListing)deserializer.ReadObject(ms);
}
public class UserListing
{
public List<UserList> users { get; set; }
}
public class UserList
{
public string FirstName { get; set; }
public string LastName { get; set; }
}