1

私のアプリケーションはasp.netです。いくつかの値をサーバーに送り返す必要があります。このために、オブジェクトを作成してシリアル化し、サーバーに送信します。サーバーで私はそれをデシリアライズしようとします 以下は私のコードです

   [Serializable]
    public class PassData
    {
        public PassData()
        {  
        }

        public List<testWh> SelectedId { get; set; }

        public string SelectedControlClientId { get; set; }

        public string GroupTypeId { get; set; }

        public string SectionTypeId { get; set; }

  }


    [Serializable]
    public class testWh
    {
        public testWh()

        {
        }
        public string Id { get; set; }
    }


JavaScriptSerializer serializer = new JavaScriptSerializer();
//this can not serialize the SelectedId and the count remains 0
PassData data = serializer.Deserialize<PassData>(jsonString);
//this serialize in an anonymous object with key value pair
var data2 = serializer.DeserializeObject(textHiddenArguments.Text);

以下は私のJsonシリアライズ文字列です

{
   "SelectedId":{"0":"ABCD","1":"JKLM"},
   "SelectedControlClientId":"YTUTOOO",
   "GroupTypeId":3,
   "SectionTypeId":"1"
}

引用符でエスケープされた文字列

"{\"SelectedId\":{\"0\":\"ABCD\",\"1\":\"JKLM\"},\"SelectedControlClientId\":\"YTUTOOO\",\"GroupTypeId\":3,\"SectionTypeId\":\"1\"}"

私の問題は選択されています Id は testWH オブジェクトの配列です。しかし、逆シリアル化しようとすると、リストである PassData の SelectedId プロパティがシリアル化されず、カウントがゼロのままになります。

リストの代わりに配列を使用しようとしましたが、「パラメーターの少ないコンストラクターはありません...」という例外が発生しました

ここで私が間違っていることを誰かが説明できますか?

4

1 に答える 1

2

ここでの重要な問題は、作成したオブジェクトと JSON が一致しないことです。これは、必要なデータを書き込んでシリアル化することで確認できます。

var obj = new PassData
{
    SelectedId = new List<testWh>
    {
        new testWh { Id = "ABCD"},
        new testWh { Id = "JKLM"}
    },
    GroupTypeId = "3",
    SectionTypeId = "1",
    SelectedControlClientId = "YTUTOOO"
};
string jsonString = serializer.Serialize(obj);

次のような JSON が得られます。

{"SelectedId":[{"Id":"ABCD"},{"Id":"JKLM"}],
 "SelectedControlClientId":"YTUTOOO","GroupTypeId":"3","SectionTypeId":"1"}

したがって、どちらを変更するかを決定する必要があります。JSON またはクラス。次の代替クラスは、元の JSON で正常に機能します。たとえば、次のようになります。

public class PassData
{
    public Dictionary<string,string> SelectedId { get; set; }
    public string SelectedControlClientId { get; set; }
    public string GroupTypeId { get; set; }
    public string SectionTypeId { get; set; }
}
于 2012-05-18T07:10:36.367 に答える