次のコードは正常に動作します
List<string> alist = new List<string>() { "1", "2", "3" };
string serialisedList= (new JavaScriptSerializer()).Serialize( alist );
List<int> deserialisedList= JsonConvert.DeserializeObject<List<int>>( serialisedList);
上記の例の serialisedList の値は、"[\"1\",\"2\",\"3\"]" です。
次に、チェックされた CheckboxList コントロール値の配列であるプロパティを持つ JavaScript オブジェクトを作成します。このオブジェクトを JSON に変換すると、キーと値のペアは次のようになります。
{
"SomeProp": "[\"1\",\"2\",\"3\"]"
}
したがって、基本的にここの値は上記のものとまったく同じです。ただし、これを C# オブジェクトに逆シリアル化しようとすると、次のようになります。
public class ServerObject
{
public List<int> SomeProp { get; set; }
}
ServerObject deserialisedObj = JsonConvert.DeserializeObject<ServerObject>( jsonString );
エラーが発生します:
Error converting value "["1","2","3"]" to type 'System.Collections.Generic.List`1[System.Int32]'. Path 'SomeProp'
直接型に直接変換できるのに、同じ値をオブジェクト プロパティに逆シリアル化できないのはなぜですか?