如何将具有 OData 的 HttpResponseMessage 转换为 C# 对象?

Nir*_*man 3 c# api json dynamics-crm asp.net-web-api

我正在从连接到 CRM 的 C# 应用程序调用 REST 服务。这将返回 HttpResponseMessage。

response.Content.ReadAsStringAsync().Result
Run Code Online (Sandbox Code Playgroud)

上述语句返回以下输出。我需要将其转换为 Account 对象,该对象已经具有“accountnumber 和 accountid 属性。

{
"@odata.context":" https://APIURL/api/data/v8.1/ $metadata#account(accountnumber)","value":[ { "@odata.etag":"W/\" 12496866\"","accountnumber":"D00208","accountid":"30417c0f-7b8c-e611-80f3-5065f38bd4d1" } ] }

我试过以下代码

Account return = JsonConvert.DeserializeObject<Account>(response.Content.ReadAsStringAsync().Result);
Run Code Online (Sandbox Code Playgroud)

但这不会填充对象,并且它在 accountnumber 和 accountid 字段中始终具有空值。

关于如何将此响应正确转换为 C# 类型的任何想法。

Ami*_*osh 6

你应该这样做 -

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; }
}
Run Code Online (Sandbox Code Playgroud)

然后反序列化-

var value = JsonConvert.DeserializeObject<RootObject>(json);
Run Code Online (Sandbox Code Playgroud)