1

さまざまなオブジェクトの固定数の配列を持つ JSON 文字列があります (Java で作成され、JSONObjectsJSONArrays):

[
  [ //The first type of object
    {
      "Initials":"MUS"
    },
    {
      "Initials":"NA"
    }
  ],
  [ //The second type
    {
      "ToolId":17
    },
    {
      ...
    }
  ]
  ... //etc.
]

したがって、配列内のオブジェクトに対応するプロパティを持ついくつかのダミークラスを作成しました。これは機能します。

private class DummyEmployee
{
    public string Initials { get; set; }
}
//etc.

しかし、コンテナ クラスをどのように設計すればよいかわかりません。これが私がやった方法です:

private class DataContainer
{
    public List<DummyEmployee> Employees { get; set; }
    public List<DummySecondType> SecondTypes { get; set; }
    //etc.
}

これは、JSON データを逆シリアル化しようとする方法です。

JavaScriptSerializer ser = new JavaScriptSerializer();

string jsonDataFromClient = ...;

DataContainer jsonData = ser.Deserialize<DataContainer>(jsonDataFromClient);

そして、それは機能しません。データの受け渡し中に次のエラーが発生します。 Type 'GUI.ValidateLoginData+DataContainer' is not supported for deserialization of an array.

さまざまなオブジェクトの配列を逆シリアル化するという問題について、他の主題を見つけることができませんでした。

4

3 に答える 3

2

はい、私は
あなたのjavascriptオブジェクトは基本的に配列であり、javascriptは動的言語である
ため、c#がそうではないため、配列(またはリスト)には同じ種類のオブジェクトが含まれている必要がある有効な配列であることに注意してください。ただし、これを実装する必要があり、JSON 構造を制御できる場合は、これを編集してください。

{
  Employees:[ //The first type of object
    {
      "Initials":"MUS"
    },
    {
      "Initials":"NA"
    }
  ],
  SecondTypes:[ //The second type
    {
      "ToolId":17
    },
    {
      ...
    }
  ]
  ... //etc.
}

現在の c# オブジェクトが正しくマップされる可能性があります。

また、JSON 構造を制御できない場合は、C#
UPDATE:-で動的オブジェクトを使用する必要があります。これは、JSON 構造を制御できない (または編集したくない) 場合です。
JSONオブジェクトを動的タイプ
UPDATE 2の配列に逆シリアル化してみてください:-興味があるので、既存のJSON構造を型のオブジェクトに逆シリアル化してみてください。試したことはList<List<dynamic>>ありませんが、正常に動作するはずです。ただし、このソリューションの欠点の 1 つは、オブジェクトの 2 つの異なるタイプ、つまりと
を区別できないことです。EmployeeSecondTypes

于 2012-05-30T11:40:49.467 に答える
0

[Serializable] 属性を DataContainer に追加しましたか?

于 2012-05-30T11:38:00.827 に答える
0

このオンライン ツールを使用して、C# クラスを作成します。その後、必要に応じてクラス (名前など) を微調整できます。少なくとも、作成しているモデル クラスが正しいかどうかはわかります。

JSON から C#

于 2012-05-30T11:36:42.197 に答える