为JSON构造C#对象

时间:2017-10-19 12:31:17

标签: c# json json-deserialization

我正在尝试在我的应用程序中为JSON响应创建一个C#对象。我有如下的JSON

 {
"@odata.context": "https://example.com/odata/$metadata#REQ",
"value": [
    {
        "Id": 17,
        "Name": "Req"
    }
  ]
 }

我不确定如何为@odata.context

创建C#对象
public class RootObject
    {
        public string @odata.context { get; set; }
        public List<Value> value { get; set; }
    }

它在@ odata.context

中抛出错误

2 个答案:

答案 0 :(得分:6)

那是因为C#中的标识符不能有@符号。你还没有说明你正在使用哪个库,但是如果它是JSON.NET那么你可以简单地装饰这些属性。

public class Root
{
    [JsonProperty("@odata.context")]
    public string OdataContext { get; set; }

    [JsonProperty("value")]
    public List<Value> Value { get; set; }
}

public class Value
{
    [JsonProperty("Id")]
    public long Id { get; set; }

    [JsonProperty("Name")]
    public string Name { get; set; }
}

答案 1 :(得分:0)

我建议使用Newtonsoft Json.NET

您还可以在文档页面上找到大量样本。这个问题正是您问题的解决方案(我添加了有问题的字段'@ odata.context`,以便您可以了解如何在JSON响应和您的类之间进行映射:

https://www.newtonsoft.com/json/help/html/DeserializeObject.htm

public class Account
{
    [JsonProperty("@odata.context")]
    public string myText { get; set; }
    public bool Active { get; set; }
    public DateTime CreatedDate { get; set; }
    public IList<string> Roles { get; set; }
}


string json = @"{
  '@odata.context': 'this is an attribute with an @ in the name.',
  'Active': true,
  'CreatedDate': '2013-01-20T00:00:00Z',
  'Roles': [
    'User',
    'Admin'
  ]
}";

Account account = JsonConvert.DeserializeObject<Account>(json);

Console.WriteLine(account.myText);
// this is an attribute with an @ in the name.

防止使用“@”作为您的财产名称。而是使用JsonProperty。这使您可以将JsonProperty映射到您的一个类字段(在这种情况下,它将JSON属性@ odata.context映射到您的类的myText属性。