0

longの配列を含むオブジェクトモデルがあり、カスタムjavascriptコンバーターとjavascriptシリアライザークラスを使用して、配列を含むjson文字列を逆シリアル化しています。

これでうまくいくと思いましたが、うまくいきません。

List<long> TheList = new List<long>;

if (dictionary.ContainsKey("TheArray") && dictionary["TheArray"] != null)
{
    TheList = serializer.ConvertToType<List<long>>(dictionary["TheArray"]); //bug
    TheObject.TheObjectList = (from s in TheList 
                               select Convert.ToInt64(s)).ToList<long>();
}

エラーは回線上にTheList = serializer.ConvertToType...あり、エラーメッセージは次のとおりです。

タイプ'System.String'のオブジェクトをタイプ'System.Collections.Generic.List`1[System.Int64]'に変換できません

私もこれを試しました:

var TheStringArray = serializer.ConvertToType<string>(dictionary["TheArray"]);

TheObject.TheObjectList = (from s in TheStringArray.Split(',') 
                           select Convert.ToInt64(s)).ToList<long>();

しかし、次のエラーメッセージが表示されます。

タイプ「System.String」は、配列の逆シリアル化ではサポートされていません。

私は何が欠けていますか?

ありがとう。

4

1 に答える 1

1

配列はとして表示さJavaScriptConverterArrayListます。次のように逆シリアル化にアプローチできます。

List<long> theArray = null;

if (dictionary.ContainsKey("TheArray") && dictionary["TheArray"] is ArrayList)
{
    theArray = new List<long>();
    ArrayList serializedTheArray = (ArrayList)dictionary["TheArray"];
    foreach (object serializedTheArrayItem in serializedTheArray)
    {
        if (serializedTheArrayItem is Int64)
            theArray.Add((long)serializedTheArrayItem);
    }
}

これにより、JSONに予期しない問題が発生した場合に備えて、すべての型のチェックが行われます。もちろんTheArray、JSONのプロパティには、配列を表す内部JSON文字列ではなく、実際には配列が含まれていることを前提としています(エラーメッセージはこの種の問題を示唆している可能性があります)。

于 2013-02-06T12:46:40.617 に答える