7

私はC#.NET 4.0を使用して、JSONをカスタムオブジェクトに解析しています。JavaScriptSerializer.Deserializeを使用して、作成したクラスにマップしています。問題は、JSONの名前と値のペアは静的ではなく、このJSONフラグメント(下部のより良いリンク)に見られるように、引数isChainによって異なります。

{
   "STATE_WALK_LEFT":{
      "isChain":"1",
      "x":"1"
   },
   "STATE_WALK_LEFT_0":{
      "x":"0"
   },
   "STATE_WALK_LEFT_1":{
      "x":"40"
   },
   "STATE_WALK_LEFT_2":{
      "x":"80"
   },
   "STATE_WALK_RIGHT":{
      "isChain":"0"
   },
   "STATE_RUN_LEFT":{
      "isChain":"0"
   }
}

チェーンには、チェーン内に_STATE_0から_STATE_25のエントリを含めることができます。このデータを保存する方法があるので、次のように12*26の空のクラスを作成する必要はありません。

public StateWalkLeft0 STATE_WALK_LEFT { get; set; }
public StateWalkLeft0 STATE_WALK_LEFT_0 { get; set; }
public StateWalkLeft1 STATE_WALK_LEFT_1 { get; set; }
public StateWalkLeft2 STATE_WALK_LEFT_2 { get; set; }
public StateWalkLeft3 STATE_WALK_LEFT_3 { get; set; }

STATE_0、STATE_1などのフィールドのみを部分的に解析するために使用できるライブラリまたはその他の方法はありますか?これらの最近追加されたJSONペアを追加する方法を提案できますか?

明確にするために編集:私が何を扱っているかを理解するために、JSONから派生したクラスを次に示します。

私のフルクラスをチェックして、JSONに何が含まれているのかを理解してください

基本的に、これらの最近実装されたチェーンを処理のためにこのクラスに格納する方法が必要です。これらのクラス/プロパティはすべて、これらのJSONから生成されます。

4

1 に答える 1

2

Newtonsoft Json.NETを使用し、例として次のコードを使用します

internal struct ChainX
{
  public int x { get; set; }
  public int isChain { get; set; }
}

    static string json = 
@"{
   ""STATE_WALK_LEFT"":{
      ""isChain"":""1"",
      ""x"":""1""
   },
   ""STATE_WALK_LEFT_0"":{
      ""x"":""0""
   }, 
   ""STATE_WALK_LEFT_1"":{
      ""x"":""40""
   },
   ""STATE_WALK_LEFT_2"":{
      ""x"":""80""
   },
   ""STATE_WALK_RIGHT"":{
      ""isChain"":""0""
   },
   ""STATE_RUN_LEFT"":{
      ""isChain"":""0""
   }
}";

辞書に逆シリアル化するコード行:

var values = JsonConvert.DeserializeObject<Dictionary<string, ChainX>>(json);

その後、辞書キーで値に簡単にアクセスできます。

ChainX valueWalkLeft1 = values["STATE_WALK_LEFT_1"];
于 2012-05-11T20:04:47.057 に答える