如何将JSON映射到C#对象

我有理解如何实现这一点的问题,基本上我们有一个API,用户发送格式的json :(请原谅代码,如果不完美,但你明白)

{"Profile": [{ "Name":"Joe", "Last :"Doe", "Client": { "ClientId":"1", "Product":"Apple", "Message":"Peter likes apples" }, "Date":"2012-02-14" }]} 

好吧不确定我是否正确格式化了JSON,但现在这是我的问题,我有一个名为Profile的类,参数名称为Last,一个对象作为其成员之一,名为Client,属性为Date。

像这样的东西:

 public class Profile { public string Name {get; set;} public string Last {get; set;} public Client client {get; set;} public DateTime dDate {get; set;} } 

所以基本上,我不知道如何抓住JSON,然后将其映射到我的对象…任何“帮助”我理解的帮助将非常感激。

问候

您可以使用Json.Ne来反序列化您的json字符串(对您的类进行一些修改)

 var yourObject = JsonConvert.DeserializeObject(jsonstring); public class Root { public Profile[] Profile; } public class Profile { public string Name { get; set; } public string Last { get; set; } public Client Client { get; set; } public DateTime Date { get; set; } } public class Client { public int ClientId; public string Product; public string Message; } 

您可以使用JSON库,例如免费的Newtonsoft.Json 。 它会自动将json映射到您的类型。

样品:

  public static T Deserialize(string json) { Newtonsoft.Json.JsonSerializer s = new JsonSerializer(); return s.Deserialize(new JsonTextReader(new StringReader(json))); } 

还有一个NuGet包。

我知道最简单的方法是使用newtonsoft的JSON.Net。 为了便于理解,我总是在C#中使用相同的名称进行匹配的类。 然后它更容易反序列化。 例如,如果它是js中的对象数组,它将映射到C#中具有相同名称的对象列表。 至于约会时间,它有点棘手。 我在服务器端执行客户端validation和Datetime.tryParse,它会处理破折号或斜杠。

 var serializer = new JavaScriptSerializer(); List abcList = serializer.Deserialize>(PassedInJsonString); 

DataContractJsonSerializer完成这项工作,但它使用更复杂的格式进行DateTime序列化。