2016-10-13 8 views
1

CRMに接続するC#アプリケーションからRESTサービスを呼び出しています。 これはHttpResponseMessageを返します。ODataを持つHttpResponseMessageをC#オブジェクトに変換するにはどうすればよいですか?

上記の文は、次の出力を返します。私はすでに持っているオブジェクト、アカウントにこれを変換する必要がある "ACCOUNTNUMBER、およびアカウントIDプロパティを

{
"@のodata.context":" https://APIURL/api/data/v8.1/ $メタデータ#アカウント(ACCOUNTNUMBER)」、 "値": 【 { "@のodata.etag": "W/\" 12496866 \ ""、 "ACCOUNTNUMBER": "D00208"、 "accountIdを": "30417c0f-7b8c e611-80f3-5065f38bd4d1 "}]}

私は次のコードを試しました

Account return = JsonConvert.DeserializeObject<Account>(response.Content.ReadAsStringAsync().Result); 

しかし、これはオブジェクトをいっぱいにしません。accountnumberフィールドとaccountidフィールドには常にnull値があります。

この応答をC#タイプに正しく変換する方法については、

答えて

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); 
+0

優れたソリューションを...ライブセーバー:) – Nirman

0

deserialize-我々はそれに基づいてAnonymous Typeを解析して作成することができます。あなたの場合は、Anonymous TypeAccountオブジェクトに置き換えてください。

:オブジェクトは以下のように定義される Accountオブジェクトに変換するために

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() 
}; 

:これは、以下のように解析できる

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' 
     } 
    ] 
}"; 

は、JSON文字列が与えられます

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(); 
0

あなたはJSONのWeb応答をデシリアライズするために、一般的なクラスを使用して、受け入れ答えを一般化することができます

 class RootObject<T> 
    { 
     public List<T> Value { get; set; } 
    } 

    var odata = JsonConvert.DeserializeObject<RootObject<POCO>>(json); 

Try it with live Demo

関連する問題