Kaip įjungti C # objektą į JSON eilutę .NET?

Turiu tokių klasių:

 class MyDate { int year, month, day; } class Lad { string firstName; string lastName; MyDate dateOfBirth; } 

Ir norėčiau paversti Lad objektą į JSON eilutę taip:

 { "firstName":"Markoff", "lastName":"Chaney", "dateOfBirth": { "year":"1901", "month":"4", "day":"30" } } 

(be formato). Radau šią nuorodą , bet naudojame „.NET 4.“ nevardomą vardų sritį. Aš taip pat girdėjau apie „ JSON.NET“ , tačiau atrodo, kad jų svetainė šiuo metu neveikia ir nesu suinteresuota naudoti išorinius DLL failus. Ar yra ir kitų parinkčių, be rankinio JSON įrašo kūrimo?

625
01 июня '11 в 15:59 2011-06-01 15:59 Hui yra nustatytas birželio 1 d. 11 val. 15:59 2011-06-01 15:59
@ 14 atsakymų

Galite naudoti „ JavaScriptSerializer klasę (pridėti nuorodą į „ System.Web.Extensions ):

 using System.Web.Script.Serialization; 
 var json = new JavaScriptSerializer().Serialize(obj); 

Visas pavyzdys:

 using System; using System.Web.Script.Serialization; public class MyDate { public int year; public int month; public int day; } public class Lad { public string firstName; public string lastName; public MyDate dateOfBirth; } class Program { static void Main() { var obj = new Lad { firstName = "Markoff", lastName = "Chaney", dateOfBirth = new MyDate { year = 1901, month = 4, day = 30 } }; var json = new JavaScriptSerializer().Serialize(obj); Console.WriteLine(json); } } 
698
01 июня '11 в 16:05 2011-06-01 16:05 atsakymą pateikė Darin Dimitrov, birželio 1 d., 11, 16:05 2011-06-01 16:05

Kadangi mes visi mėgstame vieną linijinę liniją

... tai priklauso nuo „Newtonsoft NuGet“ paketo, kuris yra populiarus ir geresnis nei numatytasis serializatorius.

 Newtonsoft.Json.JsonConvert.SerializeObject(new {foo = "bar"}) 

Dokumentacija: JSON Serialization ir Deserialization

662
02 окт. atsakymas duotas willsteel 02 okt. 2013-10-02 15:39 '13, 13:39 pm 2013-10-02 15:39

Naudokite „ DataContractJsonSerializer klasę: MSDN1 , MSDN2 .

Mano pavyzdys: čia .

Jis taip pat gali saugiai deserialize objektus iš JSON eilutės, skirtingai nei „ JavaScriptSerializer . Bet asmeniškai aš vis dar renkuosi Json.NET .

51
01 июня '11 в 16:03 2011-06-01 16:03 atsakymas duotas Edgarui birželio 1 d. 11 d. 16:03 2011-06-01 16:03

Naudokite „ Json.Net“ , galite jį atsisiųsti iš „Nuget Packet Manager“.

„Json“ eilutės serijavimas:

  var obj = new Lad { firstName = "Markoff", lastName = "Chaney", dateOfBirth = new MyDate { year = 1901, month = 4, day = 30 } }; var jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(obj); 

Objektų deserializacija:

 var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<Lad>(jsonString ); 
36
21 июня '17 в 11:15 2017-06-21 11:15 atsakymą pateikė Gokulan PH birželio 21 d., 17 val. 11:15 2017-06-21 11:15

Wooou! Tiesą sakant, geriau naudoti JSON struktūrą :)

Štai mano Json.NET naudojimo pavyzdys ( http://james.newtonking.com/json ):

 using System; using System.Collections.Generic; using System.Text; using Newtonsoft.Json; using System.IO; namespace com.blogspot.jeanjmichel.jsontest.model { public class Contact { private Int64 id; private String name; List<Address> addresses; public Int64 Id { set { this.id = value; } get { return this.id; } } public String Name { set { this.name = value; } get { return this.name; } } public List<Address> Addresses { set { this.addresses = value; } get { return this.addresses; } } public String ToJSONRepresentation() { StringBuilder sb = new StringBuilder(); JsonWriter jw = new JsonTextWriter(new StringWriter(sb)); jw.Formatting = Formatting.Indented; jw.WriteStartObject(); jw.WritePropertyName("id"); jw.WriteValue(this.Id); jw.WritePropertyName("name"); jw.WriteValue(this.Name); jw.WritePropertyName("addresses"); jw.WriteStartArray(); int i; i = 0; for (i = 0; i < addresses.Count; i++) { jw.WriteStartObject(); jw.WritePropertyName("id"); jw.WriteValue(addresses[i].Id); jw.WritePropertyName("streetAddress"); jw.WriteValue(addresses[i].StreetAddress); jw.WritePropertyName("complement"); jw.WriteValue(addresses[i].Complement); jw.WritePropertyName("city"); jw.WriteValue(addresses[i].City); jw.WritePropertyName("province"); jw.WriteValue(addresses[i].Province); jw.WritePropertyName("country"); jw.WriteValue(addresses[i].Country); jw.WritePropertyName("postalCode"); jw.WriteValue(addresses[i].PostalCode); jw.WriteEndObject(); } jw.WriteEndArray(); jw.WriteEndObject(); return sb.ToString(); } public Contact() { } public Contact(Int64 id, String personName, List<Address> addresses) { this.id = id; this.name = personName; this.addresses = addresses; } public Contact(String JSONRepresentation) { //To do } } } 

Bandymas:

 using System; using System.Collections.Generic; using com.blogspot.jeanjmichel.jsontest.model; namespace com.blogspot.jeanjmichel.jsontest.main { public class Program { static void Main(string[] args) { List<Address> addresses = new List<Address>(); addresses.Add(new Address(1, "Rua Dr. Fernandes Coelho, 85", "15º andar", "São Paulo", "São Paulo", "Brazil", "05423040")); addresses.Add(new Address(2, "Avenida Senador Teotônio Vilela, 241", null, "São Paulo", "São Paulo", "Brazil", null)); Contact contact = new Contact(1, "Ayrton Senna", addresses); Console.WriteLine(contact.ToJSONRepresentation()); Console.ReadKey(); } } } 

Rezultatas:

 { "id": 1, "name": "Ayrton Senna", "addresses": [ { "id": 1, "streetAddress": "Rua Dr. Fernandes Coelho, 85", "complement": "15º andar", "city": "São Paulo", "province": "São Paulo", "country": "Brazil", "postalCode": "05423040" }, { "id": 2, "streetAddress": "Avenida Senador Teotônio Vilela, 241", "complement": null, "city": "São Paulo", "province": "São Paulo", "country": "Brazil", "postalCode": null } ] } 

Dabar įgyvendinu konstruktoriaus metodą, kuris gaus JSON eilutę ir užpildys klasės laukus.

18
04 февр. atsakymą pateikė Jean J. Michel 04 vasaris. 2014-02-04 23:07 '14 ne 23:07 2014-02-04 23:07

Jei esate ASP.NET MVC žiniatinklio valdiklyje, tai paprasta:

 string ladAsJson = Json(Lad); 

Negaliu patikėti, kad niekas to nepaminėjo.

3
16 сент. atsakymas, pateiktas micahhoover 16 sept. 2016-09-16 18:53 '16 at 18:53 2016-09-16 18:53

Jei jie nėra labai dideli, galbūt jūsų atvejis eksportuos jį kaip „Json“. Jis taip pat leidžia jį nešiojamas visose platformose.

  using Newtonsoft.Json; [TestMethod] public void ExportJson() { double[,] b = new double[,] { { 110, 120, 130, 140, 150 }, { 1110, 1120, 1130, 1140, 1150 }, { 1000, 1, 5 ,9, 1000}, {1110, 2, 6 ,10,1110}, {1220, 3, 7 ,11,1220}, {1330, 4, 8 ,12,1330} }; string jsonStr = JsonConvert.SerializeObject(b); Console.WriteLine(jsonStr); string path = "X:\\Programming\\workspaceEclipse\\PyTutorials\\src\\tensorflow_tutorials\\export.txt"; File.WriteAllText(path, jsonStr); } 
3
28 янв. atsakymas, kurį pateikė user8426627 Jan 28 2018-01-28 19:00 '18, 7 val. 2018-01-28 19:00

Naudokite toliau pateiktą kodą, jei norite konvertuoti XML į JSON.

 var json = new JavaScriptSerializer().Serialize(obj); 
2
06 марта '14 в 12:39 2014-03-06 12:39 Atsakymą pateikė Hithesh kovo 14 d. 14 d. 12:39 2014-03-06 12:39

Naudokite šiuos įrankius C klasei sukurti

ir naudokite šį kodą

  var json = new JavaScriptSerializer().Serialize(obj); 

serializuoti savo objektą

2
22 нояб. atsakymą pateikė Artem Polischuk 22 lapkričio. 2014-11-22 01:18 '14 ne 1:18 2014-11-22 01:18

Taip paprasta, kaip ir dinaminiams objektams (objekto tipas):

 string json = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(MYOBJECT); 
2
26 июня '14 в 17:02 2014-06-26 17:02 MarzSocks atsakymą pateikė birželio 26 d. 14 val. 17:02 2014-06-26 17:02

Balsavau už „Serializer ServiceStack JSON“:

 using ServiceStack.Text string jsonString = new { FirstName = "James" }.ToJson(); 

Jis taip pat yra greičiausias „JSON“ serializatorius, skirtas „.NET“: http://www.servicestack.net/benchmarks/

2
02 окт. atsakymas, kurį pateikė James 02 Oct. 2013-10-02 16:39 '13, 4:39, 2013-10-02 16:39

Čia yra labai naudinga priemonė: http://csharp2json.io/

0
24 апр. Atsakymas duotas jallen 24 balandžio. 2018-04-24 21:03 „18, 21:03 2018-24-24 21:03

Serializer

  public static void WriteToJsonFile<T>(string filePath, T objectToWrite, bool append = false) where T : new() { var contentsToWriteToFile = JsonConvert.SerializeObject(objectToWrite, new JsonSerializerSettings { Formatting = Formatting.Indented, }); using (var writer = new StreamWriter(filePath, append)) { writer.Write(contentsToWriteToFile); } } 

Objektas

 namespace MyConfig { public class AppConfigurationSettings { public AppConfigurationSettings() {  if (AppSettings == null) { AppSettings=new AppSettings();} } public AppSettings AppSettings { get; set; } } public class AppSettings { public bool DebugMode { get; set; } = false; } } 

Įgyvendinimas

 var jsonObject = new AppConfigurationSettings(); WriteToJsonFile<AppConfigurationSettings>(file.FullName, jsonObject); 

Išeiti

 { "AppSettings": { "DebugMode": false } } 
-1
03 февр. Atsakymas pateikiamas 03 vasario mėn. 2016-02-03 21:00 16 val. 2016-02-03 21:00

Pasirūpinkite, kad jūsų klasė būtų sukurta su atitinkamu atributu:

Sukurkite šią klasę, naudodami <Serializable> atributą pagal C # pavyzdžio pavyzdį, po kurio vb.net exmpale

Su #

 using Microsoft.VisualBasic; using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Diagnostics; using System.Web; using System.Web.Script.Serialization; namespace Samples { [Serializable()] public class Customer { private int _idcustomer; public int IDCustomer { get { return _idcustomer; } set { _idcustomer = value; } } private System.DateTime _RegistrationDate; public System.DateTime RegistrationDate { get { return _RegistrationDate; } set { _RegistrationDate = value; } } private string _Name; public string Name { get { return _Name; } set { _Name = value; } } private string _Surname; public string Surname { get { return _Surname; } set { _Surname = value; } } } [Serializable()] public class Product { private int _ProductID; public int ProductID { get { return _ProductID; } set { _ProductID = value; } } private string _ProductName; public string ProductName { get { return _ProductName; } set { _ProductName = value; } } private int _Price; public int Price { get { return _Price; } set { _Price = value; } } private bool _inStock; public bool inStock { get { return _inStock; } set { _inStock = value; } } } [Serializable()] public class Order { private int _OrderId; public int OrderID { get { return _OrderId; } set { _OrderId = value; } } private int _customerID; public int CustomerID { get { return _customerID; } set { _customerID = value; } } private List<Product> _ProductsList; public List<Product> ProductsList { get { return _ProductsList; } set { _ProductsList = value; } } private System.DateTime _PurchaseDate; public System.DateTime PurchaseDate { get { return _PurchaseDate; } set { _PurchaseDate = value; } } private string _PaymentMethod; public string PaymentMethod { get { return _PaymentMethod; } set { _PaymentMethod = value; } } public string ToJson() { string json = string.Empty; JavaScriptSerializer js = new JavaScriptSerializer(); json = js.Serialize(this); js = null; return json; } } } 

PAVYZDYS VBNET

 Imports System Imports System.Web Imports System.Web.Script.Serialization Namespace Samples <Serializable()> Public Class Customer Private _idcustomer As Integer Public Property IDCustomer() As Integer Get Return _idcustomer End Get Set(ByVal value As Integer) _idcustomer = value End Set End Property Private _RegistrationDate As Date Public Property RegistrationDate() As Date Get Return _RegistrationDate End Get Set(ByVal value As Date) _RegistrationDate = value End Set End Property Private _Name As String Public Property Name() As String Get Return _Name End Get Set(ByVal value As String) _Name = value End Set End Property Private _Surname As String Public Property Surname() As String Get Return _Surname End Get Set(ByVal value As String) _Surname = value End Set End Property End Class <Serializable()> Public Class Product Private _ProductID As Integer Public Property ProductID() As Integer Get Return _ProductID End Get Set(ByVal value As Integer) _ProductID = value End Set End Property Private _ProductName As String Public Property ProductName() As String Get Return _ProductName End Get Set(ByVal value As String) _ProductName = value End Set End Property Private _Price As Integer Public Property Price() As Integer Get Return _Price End Get Set(ByVal value As Integer) _Price = value End Set End Property Private _inStock As Boolean Public Property inStock() As Boolean Get Return _inStock End Get Set(ByVal value As Boolean) _inStock = value End Set End Property End Class <Serializable> Public Class Order Private _OrderId As Integer Public Property OrderID() As Integer Get Return _OrderId End Get Set(ByVal value As Integer) _OrderId = value End Set End Property Private _customerID As Integer Public Property CustomerID() As Integer Get Return _customerID End Get Set(ByVal value As Integer) _customerID = value End Set End Property Private _ProductsList As List(Of Product) Public Property ProductsList() As List(Of Product) Get Return _ProductsList End Get Set(ByVal value As List(Of Product)) _ProductsList = value End Set End Property Private _PurchaseDate As Date Public Property PurchaseDate() As Date Get Return _PurchaseDate End Get Set(ByVal value As Date) _PurchaseDate = value End Set End Property Private _PaymentMethod As String Public Property PaymentMethod() As String Get Return _PaymentMethod End Get Set(ByVal value As String) _PaymentMethod = value End Set End Property Public Function ToJson() As String Dim json As String = String.Empty Dim js As New JavaScriptSerializer json = js.Serialize(Me) js = Nothing Return json End Function End Class 

Baigta vardų erdvė

Antrasis žingsnis yra sukurti paprastus bandymo duomenis, pavyzdžiui:

Su #

  void Main() { List<Samples.Product> ListProducts = new List<Samples.Product>(); ListProducts.Add(new Samples.Product(), With, {.inStock=False,.Price=10, .ProductID=1,.ProductName=BookOne); ListProducts.Add(new Samples.Product(), With, {.inStock=False,. Price=10, .ProductID=2, .ProductName=Hotels California); ListProducts.Add(new Samples.Product(), With, {.inStock=False,.Price=10,.ProductID=3,.ProductName=Cbr); ListProducts.Add(new Samples.Product(), With, {.inStock=False,.Price=10,.ProductID=4,.ProductName=Mustang); ListProducts.Add(new Samples.Product(), With, {.inStock=False,.Price=10, .ProductID=15,.ProductName=Anything); ListProducts.Add(new Samples.Product(), With, {.inStock=False,.Price=10,.ProductID=38,.ProductName=Monster Truck); Samples.Customer Customer = new Samples.Customer(); // With... Customer.IDCustomer = 1; Customer.Name = "Customer1"; Customer.RegistrationDate = Now; Customer.Surname = "SurnameCustomer"; Samples.Order Order = new Samples.Order(); // With... Order.CustomerID = Customer.IDCustomer; Order.OrderID = 1; Order.PaymentMethod = "PayPal"; Order.ProductsList = ListProducts; Order.PurchaseDate = Now; Console.WriteLine(Order.ToJson); Console.ReadLine(); } 

VB.NET

 Sub Main() Dim ListProducts As New List(Of Samples.Product) ListProducts.Add(New Samples.Product With {.inStock = False, .Price = 10, .ProductID = 1, .ProductName = "BookOne"}) ListProducts.Add(New Samples.Product With {.inStock = False, .Price = 10, .ProductID = 2, .ProductName = "Hotels California"}) ListProducts.Add(New Samples.Product With {.inStock = False, .Price = 10, .ProductID = 3, .ProductName = "Cbr"}) ListProducts.Add(New Samples.Product With {.inStock = False, .Price = 10, .ProductID = 4, .ProductName = "Mustang"}) ListProducts.Add(New Samples.Product With {.inStock = False, .Price = 10, .ProductID = 15, .ProductName = "Anything"}) ListProducts.Add(New Samples.Product With {.inStock = False, .Price = 10, .ProductID = 38, .ProductName = "Monster Truck"}) Dim Customer As New Samples.Customer With {.IDCustomer = 1, .Name = "Customer1",.RegistrationDate = Now, .Surname ="SurnameCustomer"} Dim Order As New Samples.Order With { .CustomerID = Customer.IDCustomer, .OrderID = 1, .PaymentMethod = "PayPal", .ProductsList = ListProducts, .PurchaseDate = Now } Console.WriteLine(Order.ToJson) Console.ReadLine() End Sub 

Ir tai yra galutinis rezultatas:

 {"OrderID":1,"CustomerID":1,"ProductsList":[{"ProductID":1,"ProductName":"BookOn e","Price":10,"inStock":false},{"ProductID":2,"ProductName":"Hotels California", "Price":10,"inStock":false},{"ProductID":3,"ProductName":"Cbr","Price":10,"inSto ck":false},{"ProductID":4,"ProductName":"Mustang","Price":10,"inStock":false},{" ProductID":15,"ProductName":"Anything","Price":10,"inStock":false},{"ProductID": 38,"ProductName":"Monster Truck","Price":10,"inStock":false}],"PurchaseDate":"\/ Date(1396642206155)\/","PaymentMethod":"PayPal"} 

Nepamirškite pridėti nuorodą į system.web.extension.dll, kad pasiektumėte savo tikslą.

-7
04 апр. Atsakymą pateikė makemoney2010 04 balandžio. 2014-04-04 23:30 '14, 23:30, 2014-04-04 23:30

Kiti klausimai apie žymes arba Užduoti klausimą