如何将JSON映射到C#对象

时间:2012-04-03 06:48:49

标签: c# asp.net json

我遇到了解如何实现这一目标的问题。

基本上我们有一个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,然后将其映射到我的对象。

任何帮助我理解的帮助都会非常感激。

4 个答案:

答案 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序列化格式。