我正在尝试在我的应用程序中为JSON响应创建一个C#对象。我有如下的JSON
{
"@odata.context": "https://example.com/odata/$metadata#REQ",
"value": [
{
"Id": 17,
"Name": "Req"
}
]
}
我不确定如何为@odata.context
public class RootObject
{
public string @odata.context { get; set; }
public List<Value> value { get; set; }
}
它在@ odata.context
中抛出错误答案 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属性。