我怎样才能parsing与C#的JSON?

我有以下代码

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

responsecontent的input是JSON,但没有正确parsing成JSON对象。 我应该如何正确地序列化它?

我假设你不使用Json.NET 。 如果是这样的话,那么你应该尝试一下。

它具有以下特点:

  1. LINQ to JSON
  2. JsonSerializer用于快速将.NET对象转换为JSON并返回
  3. Json.NET可以select性地生成格式良好的,缩进的JSON以进行debugging或显示
  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); 

正如在这里回答 – 将JSON反序列化为C#dynamic对象?

使用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; 

以下是一些使用第三方库的选项:

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

如果.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是相当甜蜜的…

另一个本地解决scheme,它不需要任何第三方库,但对System.Web.Extensions的引用是JavaScriptSerializer。 从3.5开始,这不是一个新的内置function。

 using System.Web.Script.Serialization; 

..

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

然后回来

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

你也可以看看DataContractJsonSerializer

从msdn网站下面我应该认为帮助提供一些原生function为您正在寻找。 请注意,它是为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"); 

它利用Windows.Data.JSON命名空间。

试试下面的代码:

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

我认为我见过的最好的答案是@MD_Sayem_Ahmed。

你的问题是“我怎样才能用C#parsingJson”,但是你似乎想解码Json。 如果你想解码,艾哈迈德的答案是好的。

如果您正在尝试在ASP.NET Web Api中实现此function,最简单的方法是创build一个数据传输对象来存储您要分配的数据:

 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中工作时,这帮了我很大的忙,让我的生活变得非常简单。

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