10

json オブジェクトを逆シリアル化するには、子クラスのオブジェクトまたはオブジェクトの配列を含む親クラスを定義する必要がありました。オブジェクトが取得された場合はオブジェクトである必要があり、json から配列が取得された場合はオブジェクトの配列である必要があります。

JSON 配列オブジェクト

{"y":{"x":[{"data":28}, {"data":56}, {"data":89}]}}

JSON オブジェクト

{"y":{"x":{"data":28}}}

y は一度に x を受け取り、別の時点で x[] を受け取ります。y が配列またはオブジェクトを受け取るかどうかを決定する条件はありません。

したがって、配列を受け取ったかどうかを判断するために、 IsArray() 条件をチェックしています。

私は試した

class Y
{
   public X x { get { return System.IsArray() ? new X() : new x[] }; set; }
}

class X
{
   public int data { get; set; }
}
  1. それは機能していません。
  2. System.IsArray() が認識されない??
4

4 に答える 4

6

私はJson.NET Nuget パッケージを使用してきましたが、非常に簡単に操作できました。

  string jsonStr = "{'y':{'x':[{'data':28}, {'data':56}, {'data':89}]}}";
  dynamic jobject = JsonConvert.DeserializeObject(jsonStr);

  bool isArray  = jobject.y.x.Type == JTokenType.Array;
  bool isObject = jobject.y.x.Type == JTokenType.Object;

お役に立てれば!

于 2014-01-31T20:29:27.820 に答える
1

クラスYのタイプXのプロパティxは、タイプXであると明示的に指定した場合、Xの配列にすることはできません。これをオブジェクトとして宣言することは、これを回避する1つの方法です。

配列であることを確認したい場合は、バッキングフィールド(たとえば_x)を使用し、プロパティを使用する場所で確認を行います(typeof(_x) == X[]

それは厄介になるかもしれませんが、私の最善のアドバイスは、プロパティxのタイプをX []に設定し、そのセットで値が配列であるか(設定されている_x = value場合)、そうでない場合はXの空の配列に値を追加するかを決定することです。

于 2012-04-12T06:29:23.353 に答える