我遇到了解如何实现这一目标的问题。
基本上我们有一个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,然后将其映射到我的对象。
任何帮助我理解的帮助都会非常感激。
答案 0 :(得分:37)
您可以使用Json.NET反序列化您的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;
}
答案 1 :(得分:6)
您可以使用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包。
答案 2 :(得分:1)
我知道最简单的方法是使用newtonsoft的JSON.Net。 为了便于理解,我总是在C#中使用相同的名称进行匹配的类。 然后它更容易反序列化它。 例如,如果它是js中的对象数组,它将映射到C#中具有相同名称的对象列表。 至于约会时间,它有点棘手。 我在服务器端执行客户端验证和Datetime.tryParse,它会处理破折号或斜杠。
var serializer = new JavaScriptSerializer();
List<abc> abcList = serializer.Deserialize<List<abc>>(PassedInJsonString);
答案 3 :(得分:0)
DataContractJsonSerializer完成了这项工作,但它使用了更复杂的DateTime序列化格式。