0

私はこのjson文字列を逆シリアル化しています:

[{"id":"1"},{"id":"2"},{"id":"3"}]

アイテムを表すクラスは次のとおりです。

[DataContract]
public class MyClass 
{

        public MyClass() {
            this._dtcreate = new DateTime();
        }

        private int _id;
        [DataMember(Name = "id")]
        public int Id {get;set;}

        private DateTime _dtcreate;
}

MyClassのデフォルトのコンストラクターで、「_dtcreate」のデフォルト値を設定していることに注意してください。

したがって、私はこのコードを使用して、jsonをTの配列に逆シリアル化します。

 public static T[] DeserializeArray<T>(string json)
    {
        DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T[]));
        MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json));
        T[] gType = (T[])ser.ReadObject(ms);
        return gType;
    }

json文字列を逆シリアル化すると、逆シリアル化された配列にプロパティ"_dtcreate"evaluedが見つかりませんでした。

DataContractJsonSerializerはMyClassのデフォルトコンストラクターを使用していないと思います。

使用できますか

T obj = Activator.CreateInstance<T>();

配列「gType」に属するすべてのオブジェクトのインスタンスを作成して、逆シリアル化されたリストのすべてのオブジェクトがTクラスのdafaultコンストラクターで作成されるようにしますか?

どうもありがとう!

4

1 に答える 1

1

DataContractシリアライザーはコンストラクターを実行しません。

代わりに、ロジックを[OnDeserializing]メソッドに入れる必要があります。

于 2010-11-28T19:08:18.920 に答える