7

fastJSONを使用していますが、問題が発生しました。JSON文字列を取得してオブジェクトのコレクションに変換できません。

私はそれがこれを処理できると思ったが、多分私はそれを間違っているか誤解している。

オブジェクトのポリモーフィックコレクションを処理します

これは、C#cmd行アプリで行った例です(.csファイルをダウンロードしてプロジェクトに追加し、次のコードをコピーしてテストします)。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Class1> store = new List<Class1>();
            for (int i = 0; i < 3; i++)
            {
                Class1 c = new Class1();
                c.Name = "test";
                c.Start = DateTime.Now;
                store.Add(c);
            }

           string jsonResult = fastJSON.JSON.Instance.ToJSON(store);

           List<Class1> backToObject = fastJSON.JSON.Instance.
               ToObject<List<Class1>>(jsonResult);
        }
    }

    public class Class1
    {
        public string Name { get; set; }
        public DateTime Start { get; set; }
    }
}

backToObject常にnullです。

fastJSONを使用しているのは、.NETライブラリに実際に依存しないものが必要であり、monodroid(およびおそらく後でmonotouch)を使用しており、使用できるものと使用できないものが非常に難しいためです。

たとえば、Json.netライブラリを使用できません(monodroid用のライブラリがあると思いますが、iPhoneの部分を実行するときにコードを再利用できるようにしようとしています)。

4

2 に答える 2

5

fastJSON 2.xの時点では、OPコードは基本的に正常に機能するはずです(構文がわずかに変更されていることに注意してください)。

List<Class1> wallets = JSON.ToObject<List<Class1>>(json);
于 2014-06-08T08:51:48.490 に答える
4

ToObjectアレイの逆シリアル化には使用しないでください。代わりに、このParseメソッドを使用してJSONを解析する必要があります。

を使用ToObjectする場合、JSONに逆シリアル化されているオブジェクトのインスタンス(配列やスカラー値ではない)があると想定しています。を使用すると、JSONにシリアルParse化されたすべての型が処理され、適切な型が返されます。

この場合、呼び出しParseて渡すと、次の3つのインスタンスを含むjsonResultが返されます。ArrayList

ArrayList arrayList = fastJSON.JSON.Instance.parse(jsonResult) as ArrayList;

これに伴う問題は、スカラー値(または参照の場合は他のインスタンス)がプロパティ名にマップされているインスタンスがArrayList多数含まれていることです。Dictionary<string, object>Dictionary<string, object>

これをバグとして分類します。配列の解析でこれを正しく処理できると思います。

のコードを変更して、ParseArrayへの呼び出しが行われたときにタイプをスニッフィングすることarray.Addができます。

ParseNumberそれでも、文字列を返す(呼び出される可能性がある)という問題が残ります。これはあなたに影響を与えるかもしれませんし、影響を与えないかもしれません。

必要な変更を加えるだけでなく、CodePlexプロジェクトサイトの課題追跡システムに課題を提出します

于 2011-08-11T14:22:01.317 に答える