如何将JSON映射到C#对象
我在理解如何做到这一点上存在问题,基本上我们有一个API,用户发送一个json格式:(如果代码不完美,请谅解)如何将JSON映射到C#对象
{"Profile": [{
"Name":"Joe",
"Last :"Doe",
"Client":
{
"ClientId":"1",
"Product":"Apple",
"Message":"Peter likes apples"
},
"Date":"2012-02-14"
}]}
好吧不知道如果我的JSON格式正确,但现在这是我的问题,我有一个名为Profile
的类,其参数Name,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<Root>(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<T>(string json)
{
Newtonsoft.Json.JsonSerializer s = new JsonSerializer();
return s.Deserialize<T>(new JsonTextReader(new StringReader(json)));
}
还有可用NuGet包。
仅供参考,你也可以将其添加为NuGet包直接在VS,这是很舒服 – Marek 2012-04-03 06:58:09
我知道的最简单的方法是使用newtonsoft的JSON.Net。为了便于理解,我总是在C#中使用相同的名称创建匹配的类。 然后它更容易反序列化它。 举个例子,如果它是js中的一个对象数组,它将映射到C#中具有相同名称的对象列表。 至于日期时间,它有点棘手。 Id在服务器端执行客户端验证和Datetime.tryParse,它会照顾破折号或斜线。
var serializer = new JavaScriptSerializer();
List<abc> abcList = serializer.Deserialize<List<abc>>(PassedInJsonString);
酷,什么根类的角色?对不起,如果一个新手的问题:) – user710502 2012-04-03 07:00:36
因为你的'Profile'数组在一个对象内部(json的根对象没有像xml这样的名字)。我把它命名为'Root',你可以选择任何你想要的名字 – 2012-04-03 07:02:26
哇!........... – 2012-09-04 14:21:51