ฉันจะวิเคราะห์ JSON ด้วย C # ได้อย่างไร


455

ฉันมีรหัสต่อไปนี้:

var user = (Dictionary<string, object>)serializer.DeserializeObject(responsecontent);

อินพุตในresponsecontentคือ JSON แต่แยกวิเคราะห์ไม่ถูกต้องในวัตถุ ฉันจะกำจัดมันออกไปได้อย่างไร?


7
สวัสดีคุณอาจต้องการลองลิงค์นี้techblog.procurios.nl/k/n618/news/view/14605/14863/ …
Vamsi

34
นอกจากนี้JsonในSystem.Web.Helpersที่มีJsonQueryStringConverterในSystem.ServiceModel.WebมีJavascriptSerializerในSystem.Web.Script.Serialization, DataContractJsonSerializerในSystem.Runtime.Serialization.Jsonห่า MS ได้ตัดสินใจแม้จะรวมถึงบุคคลที่สามJson.NETในของเว็บ ASP.NET API ถ้าคุณคิดว่ายังไม่พอ MS ก็มาด้วยSystem.Jsonแต่ในปัจจุบันไม่เหมาะสำหรับการบริโภค ทางไป Microsoft ทางไป .... ฉันเลือกตามเนมสเปซที่ดูดีที่สุด
nawfal

4
@fusi ส่วนที่เหลืออยู่ในชุดแยกต่างหาก Google ชื่อ namespace / class คุณจะพบแอสเซมบลีที่อยู่ในเอกสารของ msdn เพียงเพิ่มการอ้างอิงไปยังแอสเซมบลีนั้น
nawfal

1
เพิ่งจะเสร็จสมบูรณ์นอกจากนี้ยังมีJsonValueในWindows.Data.JsonWindows 8 ขึ้นไปเท่านั้น ฉันรักมัน. MS กำลังทำภารกิจ :)
nawfal

5
NewtonSoft มีหน้าเปรียบเทียบบนเว็บไซต์ของพวกเขา (อาจจะลำเอียง แต่ยังคงน่าสนใจ): newtonsoft.com/json/help/html/jsonnetvsdotnetserializers.htm ฉันชอบแถวการทำให้เป็นอันดับพจนานุกรมที่ไม่เป็นเรื่องเป็นพิเศษ :)
Ohad Schneider

คำตอบ:


366

ฉันสมมติว่าคุณไม่ได้ใช้Json.NET (แพคเกจ Newtonsoft.Json NuGet) หากเป็นเช่นนี้คุณควรลอง

มันมีคุณสมบัติดังต่อไปนี้:

  1. LINQ ถึง JSON
  2. JsonSerializer สำหรับการแปลงออบเจ็กต์. NET ของคุณเป็น JSON อย่างรวดเร็วและกลับมาอีกครั้ง
  3. Json.NET เป็นทางเลือกที่สามารถผลิตรูปแบบที่ดีเยื้อง JSON สำหรับการแก้จุดบกพร่องหรือการแสดงผล
  4. แอททริบิวต์เช่น JsonIgnore และ JsonProperty สามารถเพิ่มเข้ากับคลาสได้
  5. ความสามารถในการแปลง JSON เป็นและจาก XML
  6. รองรับหลายแพลตฟอร์ม: .NET, Silverlight และ Compact Framework

ดูตัวอย่างด้านล่าง ในตัวอย่างนี้JsonConvertคลาสที่ใช้ในการแปลงวัตถุเป็นและจาก JSON มันมีสองวิธีคงที่เพื่อการนี้ พวกเขาSerializeObject(Object obj)และ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);

18
ฉันสามารถยกเลิกการแปลงเป็นvarตัวแปรประเภทได้หรือไม่ในกรณีที่ฉันไม่ทราบโครงสร้างที่สมบูรณ์ของวัตถุประสงค์ของฉัน โดยเฉพาะฉันใช้เรื่องราวผู้ใช้แรลลี่และฉันต้องการแปลงเป็นวัตถุ
Pedro Dusso

16
@VANDERWEYENJonathan - ในเว็บเบราว์เซอร์ที่ทันสมัย, JSON.parse (สตริง) และ JSON.stringify (วัตถุ) ทั้งคู่จัดการวันที่เป็นสตริง ISO8601 ซึ่งเป็นรูปแบบที่ปรากฎในคำตอบข้างต้น คุณอาจต้องการอัปเดตมาตรฐานของคุณก่อนที่คนอื่นจะตัดสินว่าไม่เกี่ยวข้อง ผู้คนต้องการเดทกันมากกว่าที่พวกเขาต้องการมาตรฐานของคุณ
Peter Wone

3
@PeterWone: ไม่JSON.parse('{"Expiry": "2008-12-28T00:00:00"}').Expiryส่งคืนสตริง "2008-12-28T00:00:00"ไม่ใช่วันที่ มันสามารถเปลี่ยนเป็นDateทางผ่านnew Date(str)ได้ แต่JSON.parseไม่รู้อะไรเกี่ยวกับวันที่ คุณต้องส่ง reviver ที่ตรวจสอบค่าสตริงแต่ละค่ากับรูปแบบ
TJ Crowder

3
ตั้งแต่ 3.703 วินาทีเหมือนกับ 3s และ 703ms และตัวแยกเป็นจุดทศนิยมที่ฉันบอกคุณว่านี่คือวินาทีทศนิยมสามตำแหน่ง
Peter Wone

38
ทำไมทุกคนจะมีปัญหาดังกล่าวด้วยรวมทั้งที่เกี่ยวข้องrequire, include, importหรือusingงบในคำตอบของพวกเขา หนึ่งบรรทัดนั้นจะเจ็บหรือเปล่า?
Tomáš Zato - Reinstate Monica

285

ตามที่ได้รับคำตอบไว้ที่นี่ - ทำการดีซีเรียลไลซ์ JSON ให้เป็นออบเจ็กต์ไดนามิก C # หรือไม่

มันค่อนข้างง่ายโดยใช้ 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;

หรือใช้ 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;

13
@ MaxHodges คุณพูดถูก ฉันเพิ่งใช้ "สตริงมายากล" แบบอินไลน์สำหรับสาธิตวิธีแยกค่าสตริง JSON ไม่ต้องการให้มันดูซับซ้อนด้วยการหลีกเลี่ยงการใส่เครื่องหมายคำพูดคู่ ในรหัสจริงเรามักจะมีสตริง JSON ที่ได้จากที่อื่นเป็นตัวแปรหรือส่งผ่านเป็นพารามิเตอร์
Dmitry Pavlov

4
หากไม่มี. net 4 คุณจะไม่มีคำหลัก 'ไดนามิก' คุณสามารถใช้ 'var stuff' สำหรับการประกาศและแทน 'stuff.Name' และ 'stuff.Address.City' คุณมี 'stuff ["ชื่อ"]' และ 'stuff ["ที่อยู่"] ["เมือง"]' ตามลำดับ .
Fil

1
@Fil ที่ช่วยให้คุณมีค่าของชนิดและคุณไม่สามารถใช้การจัดทำดัชนีในobject object
Alex

138

นี่คือตัวเลือกบางอย่างโดยไม่ใช้ห้องสมุดบุคคลที่สาม:

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

ดูการเชื่อมโยงสำหรับข้อมูลเพิ่มเติมเกี่ยวกับSystem.Web.Helpers.Json

อัปเดต : ทุกวันนี้วิธีที่ง่ายที่สุดในการรับWeb.Helpersคือใช้แพ็คเกจ NuGetแพคเกจ


หากคุณไม่สนใจรุ่นก่อนหน้าของ windows คุณสามารถใช้คลาสของWindows.Data.Jsonเนมสเปซ:

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

ทำไมฉันไม่เห็น System.Web.Helpers ในเว็บไซต์ ASP.NET ของฉัน (4.5) XElement, XPathSelectElement ไม่รู้จัก VisualStudio ของฉัน จะให้ความรู้ได้อย่างไร?
Budda

คุณต้องเพิ่มการอ้างอิงสำหรับไลบรารีที่เกี่ยวข้อง (ดังที่เขียนไว้ในความคิดเห็นด้านบน) ดูบทความนี้สำหรับข้อมูลเพิ่มเติม นอกจากนี้คำถามนี้อาจเป็นที่สนใจ
qqbenq

2
ฉันใช้วิธี Web.Helpers อธิบายไว้ที่นี่ แต่พบปัญหาที่แก้ไขโดยโพสต์นี้: stackoverflow.com/questions/7066726/…
Alex

1
มันทำงานกับ WPF.By โดยใช้เนมสเปซต่อไปนี้โดยใช้ System.Runtime.Serialization.Json; ใช้ System.Xml.XPath; ใช้ System.Xml.Linq;
Shahid Neermunda

3
Json.Net แทบจะเป็นองค์ประกอบของบุคคลที่สามอีกต่อไป Microsoft ใช้มันเองวันนี้ มันเป็นค่าเริ่มต้นของ serilizer บน Web API
เลียม

62

หาก. NET 4 พร้อมให้คุณใช้งานลองดู: http://visitmix.com/writings/the-rise-of-json (archive.org)

นี่คือตัวอย่างจากเว็บไซต์นั้น:

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

สุดท้าย Console.WriteLine ก็น่ารักดี ...


ขออภัยดูเหมือนว่าสิ่งต่าง ๆ จะเปลี่ยนแปลงไปตั้งแต่ฉันตอบครั้งแรก ฉันจะต้องใช้เวลาดูไปรอบ ๆ และดูที่ห้องสมุดเป็นหนึ่งที่ถูกต้อง ...
ElonU Webdev

7
หวังว่าจะได้พบห้องสมุดนี้ แก้ไข: มันคืออันนี้: dynamicjson.codeplex.comหรือไม่
user989056

1
ฉันไม่รู้ว่าคลาส ElonU หมายถึงอะไรที่นี่ แต่มี "JsonValue" ใน Windows.Data.Json (ซึ่งเฉพาะสำหรับ Windows 8 ขึ้นไป - แปลก) และ "JsonValue" เดียวกันใน System.Json ซึ่งยังอยู่ในหน้าตัวอย่างและ พระเจ้าเท่านั้นที่รู้ว่ามันจะออกมา MS ทำให้ฉันสับสนเมื่อมาถึง Json
nawfal

35

โซลูชันเนทีฟอื่นสำหรับเรื่องนี้ซึ่งไม่ต้องการไลบรารีบุคคลที่สามใด ๆ แต่การอ้างอิงถึงSystem.Web.Extensionsคือ JavaScriptSerializer นี่ไม่ใช่สิ่งใหม่ แต่เป็นคุณสมบัติในตัวที่ไม่รู้จักมาตั้งแต่ 3.5

using System.Web.Script.Serialization;

..

JavaScriptSerializer serializer = new JavaScriptSerializer();
objectString = serializer.Serialize(new MyObject());

และกลับมา

MyObject o = serializer.Deserialize<MyObject>(objectString)

2
นี่เป็นสิ่งที่ดีมาก แต่มันต้องการเว็บ comonents ดังนั้นมันจึงไม่สามารถใช้งานได้ใน. NET 4.0 Client Profile ซึ่งเป็น. NET เวอร์ชันล่าสุดสำหรับ Windows XP การติดตั้ง. NET เต็มรูปแบบนั้นเป็นไปได้ แต่หลาย ๆ คนก็ติดอยู่กับโปรไฟล์ลูกค้า ในทางตรงกันข้าม System.Runtime.Serialization.Json.DataContractJsonSerializer จะถูกระงับแม้ในโปรไฟล์ลูกค้า
Al Kepp

3
@ fr34kyn01535: Windows XP เป็นตลาดที่มีผู้ใช้งานมากที่สุดเป็นอันดับสองบนเดสก์ท็อป มันเกี่ยวข้องกัน
DonkeyMaster

เมื่อฉันใช้ JavaScriptSerializer เพื่อลบวัตถุของฉันมันก็ใช้งานได้ แต่จะทำการลบวันที่ของฉันไม่ถูกต้อง มันควรจะเป็น 4/19/2018 12:00 AM แต่ดีซีเรียลไลซ์เป็น 4/18/2018 08:00 PM NewtonSoft.Json.JsonConvert deserialized ตามที่คาดไว้
รวย


16

System.Json ทำงานตอนนี้ ...

ติดตั้ง nuget https://www.nuget.org/packages/System.Json

PM> Install-Package System.Json -Version 4.5.0

ตัวอย่าง :

// 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();
        }
    }
}

1
พยายามหาตัวอย่างของวิธีการใช้ System.Json ที่ทันสมัยอย่างถูกต้องทำให้ฉันมาที่นี่หลังจากผลลัพธ์ที่นับไม่ถ้วนสำหรับ Json.NET/Newtonsoft.Json/"Newtson.Json "และการทำซ้ำของ System.Json ที่เก่ากว่านั้นเลิกใช้แล้ว ขอบคุณสำหรับสิ่งนี้.
monkey0506

1
สิ่งนี้ช่วยฉันได้อย่างมาก ขอบคุณมาก.
MAK

10

ใช้เครื่องมือนี้เพื่อสร้างคลาสตาม json ของคุณ:

http://json2csharp.com/

จากนั้นใช้คลาสเพื่อ deserialize json ของคุณ ตัวอย่าง:

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': 'james@example.com',
  'Active': true,
  'CreatedDate': '2013-01-20T00:00:00Z',
  'Roles': [
    'User',
    'Admin'
  ]
}";

Account account = JsonConvert.DeserializeObject<Account>(json);

Console.WriteLine(account.Email);
// james@example.com

ข้อมูลอ้างอิง: https://forums.asp.net/t/1992996.aspx?Nested+Json+Deserialization+to+C+object+and+using+that+object https://www.newtonsoft.com/json/help /html/DeserializeObject.htm


9

ลองรหัสต่อไปนี้:

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

ขอบคุณฉันต้องการส่วน ["ผล" + ตัวแปร] เพราะฉันต้องการใช้ตัวแปรที่จะใช้ที่นี่ซึ่งคุณไม่สามารถทำกับ JSON.NET ได้อย่างง่ายดาย
PHPGuru

เป็นบรรทัดนี้ทำอะไร ... JavaScriptSerializer js = new JavaScriptSerializer (); ขอบคุณล่วงหน้า.
Chris Catignani

9

System.Text.Json

.NET core 3.0 มาพร้อมกับSystem.Text.Jsonbuilt-in ซึ่งหมายความว่าคุณสามารถ deserialize / serialize JSON โดยไม่ต้องใช้ไลบรารีบุคคลที่สาม

ในการทำให้คลาสของคุณเป็นสตริง JSON:

var json = JsonSerializer.Serialize(order);

ในการ deserialize JSON ให้เป็นคลาสที่พิมพ์อย่างมาก:

var order = JsonSerializer.Deserialize<Order>(json);

ดังนั้นหากคุณมีชั้นเรียนดังต่อไปนี้:

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

สิ่งหนึ่งที่ควรทราบคือSystem.Text.Json ไม่ได้จัดการcamelCaseคุณสมบัติ JSON โดยอัตโนมัติเมื่อใช้รหัสของคุณเอง (แต่จะทำเช่นนั้นเมื่อใช้การร้องขอ MVC / WebAPI และตัวยึดโมเดล)

ในการแก้ไขปัญหานี้คุณต้องผ่านJsonSerializerOptionsเป็นพารามิเตอร์

JsonSerializerOptions options = new JsonSerializerOptions
{        
    PropertyNamingPolicy = JsonNamingPolicy.CamelCase,  // set camelCase       
    WriteIndented = true                                // write pretty json
};

// pass options to serializer
var json = JsonSerializer.Serialize(order, options);
// pass options to deserializer
var order = JsonSerializer.Deserialize<Order>(json, options);

System.Text.Jsonยังมีให้สำหรับ. Net Framework และ. Net Standard เป็นแพ็คเกจ Nu-get System.Text.Json


1
ถ้าคุณไม่มีคลาส ถ้าคุณไม่รู้ว่าข้อมูล json จะมีอะไรอยู่ หรือถ้ามีกุญแจอยู่เลย?
Cherona

JsonDocument.Parseใช้ @Cherona
haldo

5

ฉันควรคิดว่าสิ่งต่อไปนี้จากไซต์msdnช่วยให้มีฟังก์ชั่นพื้นฐานบางอย่างสำหรับสิ่งที่คุณกำลังมองหา โปรดทราบว่ามันถูกระบุไว้สำหรับ Windows 8 ตัวอย่างหนึ่งดังกล่าวจากเว็บไซต์อยู่ด้านล่าง

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

มันใช้namespace Windows.Data.JSON


6
ดี แต่ "ไคลเอนต์ขั้นต่ำที่รองรับ: Windows 8"
watbywbarif

ฉันคิดว่ามันไม่ได้รับการสนับสนุนเพิ่มเติมและตอนนี้มี newtonsoft json dll icouldnt หา windows.data.json
virtouso

3
@ virtouso ตามที่ watbywbarif ชี้ให้เห็นว่าจริง ๆ แล้วค่อนข้างใหม่ แต่การสนับสนุนขั้นต่ำจากMicrosoft สามารถใช้งานได้ใน Windows 8 เท่านั้น
TargetofGravity

4

คุณสามารถใช้ขอบเขตต่อไปนี้

public static class JsonExtensions
{
    public static T ToObject<T>(this string jsonText)
    {
        return JsonConvert.DeserializeObject<T>(jsonText);
    }

    public static string ToJson<T>(this T obj)
    {
        return JsonConvert.SerializeObject(obj);
    } 
}

0

ฉันคิดว่าคำตอบที่ดีที่สุดที่ฉันเห็นคือ @MD_Sayem_Ahmed

คำถามของคุณคือ "ฉันจะแยกวิเคราะห์ Json ด้วย C #" ได้อย่างไร แต่ดูเหมือนว่าคุณต้องการถอดรหัส Json หากคุณต้องการถอดรหัสคำตอบของ Ahmed นั้นดี

หากคุณพยายามทำสิ่งนี้ให้สำเร็จใน ASP.NET Web Api วิธีที่ง่ายที่สุดคือการสร้างออบเจ็กต์การถ่ายโอนข้อมูลที่เก็บข้อมูลที่คุณต้องการกำหนด:

public class MyDto{
    public string Name{get; set;}
    public string Value{get; set;}
}

คุณได้เพิ่มส่วนหัวของ application / json ลงในคำขอของคุณ (เช่นถ้าคุณใช้ Fiddler เป็นต้น) จากนั้นคุณจะใช้สิ่งนี้ใน ASP.NET Web API ดังต่อไปนี้:

//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
}

สิ่งนี้ช่วยฉันได้มากเมื่อฉันทำงานใน Web Api และทำให้ชีวิตง่ายขึ้น


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

-1
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"]);

2
คุณควรอธิบายวิธีแก้ปัญหาของคุณดีกว่าแทนที่จะโพสต์โค้ดบางแถว คุณอาจอ่านฉันจะเขียนคำตอบที่ดีได้อย่างไร
Massimiliano Kraus

อย่าลืมที่จะรวมSystem.Webไว้ในการอ้างอิงโครงการของคุณ
Ohad Cohen

-3
 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; } 
 }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.