我从连接到CRM的C#应用程序调用REST服务。 这将返回HttpResponseMessage。
response.Content.ReadAsStringAsync().Result
以上语句返回以下输出。我需要将此转换为Account对象,该对象已经具有" accountnumber和accountid属性。
{
" @ odata.context":" https://APIURL/api/data/v8.1/ $元数据#帐户(ACCOUNTNUMBER)""值":[ { " @ odata.etag":" W / \" 12496866 \""" ACCOUNTNUMBER":" D00208&#34 ;," ACCOUNTID":" 30417c0f-7b8c-e611-80f3-5065f38bd4d1" }]}
我尝试过以下代码
Account return = JsonConvert.DeserializeObject<Account>(response.Content.ReadAsStringAsync().Result);
但是这并没有填满对象,并且它在accountnumber和accountid字段中总是有空值。
如何正确地将此响应转换为C#类型的任何想法。
答案 0 :(得分:3)
你应该这样做 -
public class Value
{
[JsonProperty("@odata.etag")]
public string etag { get; set; }
public string accountnumber { get; set; }
public string accountid { get; set; }
}
public class RootObject
{
[JsonProperty("@odata.context")]
public string context { get; set; }
public List<Value> value { get; set; }
}
然后反序列化 -
var value = JsonConvert.DeserializeObject<RootObject>(json);
答案 1 :(得分:0)
我们可以基于此解析并创建Anonymous Type
。在您的情况下,将Anonymous Type
替换为Account
对象。
给定JSON字符串:
string json = @"{
'@odata.context':'https://APIURL/api/data/v8.1/$metadata#account(accountnumber)',
'value':[
{
'@odata.etag':'W/\'12496866\'',
'accountnumber':'D00208',
'accountid':'30417c0f-7b8c-e611-80f3-5065f38bd4d1'
}
]
}";
可以解析如下:
var jsonObject = JObject.Parse(json);
var dataObject = new
{
Context = jsonObject["@odata.context"],
Values = jsonObject["value"].AsEnumerable<JToken>()
.Select(v => new
{
ETag = v["@odata.etag"],
AccountNumber = v["accountnumber"],
AccountId = v["accountid"]
}).ToArray()
};
为了转换为Account
对象,其中对象定义如下:
public class Account
{
public string Number { get; set; }
public string Id { get; set; }
}
然后可以解析JSON
对象如下(如果只查找第一个节点;它也可以转换为Account
的列表:
var jsonObject = JObject.Parse(json);
var account = jsonObject["value"].AsEnumerable<JToken>()
.Select(v => new Account()
{
Number = v["accountnumber"].ToString(),
Id = v["accountid"].ToString()
}).FirstOrDefault();
答案 2 :(得分:0)
您可以使用通用类对json Web响应进行反序列化来概括接受的答案:
class RootObject<T>
{
public List<T> Value { get; set; }
}
var odata = JsonConvert.DeserializeObject<RootObject<POCO>>(json);