Permalänk
Medlem

Läsa (parse) JSON med C#

Hur kan man lättast arbeta med JSON i C#?

Visa signatur

Chassi: Fractal Design Define C || Processor: Intel i7-8700K || Grafikkort: ASUS GeForce GTX 1080Ti ROG Strix Gaming || Moderkort: Gigabyte Z370 AORUS ULTRA WIFI || Minne: Corsair Vengeance LPX DDR4 3000MHz 32 Gb || Lagring: Samsung 860 EVO 1TB SSD || PSU: Seasonic Focus+ 850W 85+ GOLD PSU || Skärm:Samsung Odyssey G9 || Windows 10

Permalänk
Medlem

@Larsp777:

Newtonsoft

Permalänk
Medlem

För att generera klasser brukar jag köra den här:
http://json2csharp.com/

Sen deserialisera med typ Json.NET (Newtonsoft)

Visa signatur

DAN Cases A4-SFX | AMD Ryzen 7 9800X3D | Thermalright AXP90-X47 Full Copper |
INNO3D GeForce RTX 4070 Ti SUPER 16GB Twin X2 | Kingston 32GB (2x16GB) DDR5 6000MHz CL30 | ASUS ROG Strix B650E-I Gaming WIFI | Samsung 960 EVO 1TB | Corsair SF-600

Permalänk
Medlem

https://stackoverflow.com/questions/6620165/how-can-i-parse-j...

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);

Permalänk
Medlem

@Nioreh83:

Ok, tack!

Kan man göra det direkt i C#, alltså omvandla en JSON-fil till objekt?

Visa signatur

Chassi: Fractal Design Define C || Processor: Intel i7-8700K || Grafikkort: ASUS GeForce GTX 1080Ti ROG Strix Gaming || Moderkort: Gigabyte Z370 AORUS ULTRA WIFI || Minne: Corsair Vengeance LPX DDR4 3000MHz 32 Gb || Lagring: Samsung 860 EVO 1TB SSD || PSU: Seasonic Focus+ 850W 85+ GOLD PSU || Skärm:Samsung Odyssey G9 || Windows 10

Permalänk
Medlem
Skrivet av civ1:

https://stackoverflow.com/questions/6620165/how-can-i-parse-j...

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);

Tackar!

Visa signatur

Chassi: Fractal Design Define C || Processor: Intel i7-8700K || Grafikkort: ASUS GeForce GTX 1080Ti ROG Strix Gaming || Moderkort: Gigabyte Z370 AORUS ULTRA WIFI || Minne: Corsair Vengeance LPX DDR4 3000MHz 32 Gb || Lagring: Samsung 860 EVO 1TB SSD || PSU: Seasonic Focus+ 850W 85+ GOLD PSU || Skärm:Samsung Odyssey G9 || Windows 10

Permalänk
Medlem
Skrivet av Larsp777:

@Nioreh83:

Ok, tack!

Kan man göra det direkt i C#, alltså omvandla en JSON-fil till objekt?

Ja, det är bara att kopiera din json/xml kod, välj sedan Edit > Paste Special > Paste Json as Classes.

Permalänk
Inaktiv

http://json2csharp.com/ du kan använda verktyget här om du har stora klasser och inte orkar skriva objekten själv

Permalänk
Medlem

En rolig feature med c# och newtonsoft är att du kan välja mellan att använda statisk objekt modell eller dynamisk.
@civ1 har gett ett exempel på en statisk modell, som du kan få fram med hjälp av sidan @anon81912 länkade (eller att du skriver klasserna själv). Ett annat sätt att jobba med newtonsoft är följande.

Serializering med object initializer:

var json = JsonConvert.SerializeObject(new { name = "abc", age = 123 });

Deserializering:

var obj = JsonConvert.DeserializeObject<dynamic>(json); String name = obj.name; // "abc" int age = obj.age; // 123

Att köra allt dynamiskt är väldigt händigt när du kontrollerar flödet mellan en servern och klienten, och inte är i behov av att lagra informationen som ett objekt. Går även att använda när du hämtar ett information från ett vedertaget API och vill skicka vidare informationen utan att behöva mellan lagra det i objekt.