2016-04-28 12 views
0

特定のAPIのリクエストを送信すると、私は素晴らしいJSsonを返しますが、問題は、私が提供するパラメータによって、オブジェクト名は常に異なります構造は同じままです。だから私はjsonをNewtonsoftのライブラリを使ってC#クラスに変換しようとしています。私はこれを行うために見つけた唯一の方法は、JsonTextReaderを使用することですが、これを達成するためのよりクリーンな方法がある場合、私はドキュメントを参照し、その点で私を助けるために何かを見つけることができませんでした。また、JValue.Parseを動的オブジェクトマッピングに使用しようとしましたが、プロパティ名は常に異なるので、それは私を助けません。ここ は、問題を説明するためのコードサンプルです:newtonsoftプロパティの動的オブジェクト名を逆シリアル化する

{ 
"error": [], 
    "result": { 
    //This property name always changes 
    "changingPropertyName": [ 
     [ 
     "456.69900", 
     "0.03196000", 
     1461780019.8014, 
     ]] 
    } 

//C# mapping 
public partial class Data 
{ 
    [JsonProperty("error")] 
    public object[] Error { get; set; } 

    [JsonProperty("result")] 
    public Result Result { get; set; } 
} 

public class Result 
{ 
    [JsonProperty("changingPropertyName")] 
    public object[][] changingPropertyName{ get; set; } 
} 
+1

あなたは属性でこれを行うことはできません。カスタムコンバータなどを書く必要があります。 –

答えて

1

一つの方法は、中Dictionary<string, T>を使用することです厳密に型指定されたクラスの場所(ここでTはキャプチャしようとしている変数プロパティの型です)。たとえば:

public partial class Data 
{ 
    [JsonProperty("error")] 
    public object[] Error { get; set; } 

    [JsonProperty("result")] 
    public Dictionary<string, object[][]> Result { get; set; } 
} 

その後、辞書から最初KeyValuePairを取得することができますし、それから変数プロパティの名前と値の両方が利用可能になります。

string json = @" 
{ 
    ""error"": [], 
    ""result"": { 
    ""changingPropertyName"": [ 
     [ 
     ""456.69900"", 
     ""0.03196000"", 
     1461780019.8014 
     ] 
    ] 
    } 
}"; 

var data = JsonConvert.DeserializeObject<Data>(json); 

KeyValuePair<string, object[][]> pair = data.Result.First(); 
Console.WriteLine(pair.Key + ":"); 
object[][] outerArray = pair.Value; 

foreach (var innerArray in outerArray) 
{ 
    foreach (var item in innerArray) 
    { 
     Console.WriteLine(item); 
    } 
} 

フィドル:https://dotnetfiddle.net/rlNKgw

+0

その解決策は本当にきれいです、助けてくれてありがとう! –

+0

問題ありません。あなたがそれが有用であったことをうれしく思います。 –

1

あなたが使用して交流#ダイナミックにそれをデシリアライズすることができます:変数のプロパティ名に対処するための

dynamic dynamicObj= JsonConvert.DeserializeObject<dynamic>(jsonResultString); 
関連する問題