11

私はこのクラスを持っています:

public class MySerializableClass
{
    public List<MyObject> MyList { get; set; }
}

MySerializableClass がシリアル化されたときに MyList が null の場合、逆シリアル化されたときにも null にする必要がありますが、XmlSerializer はクラスを逆シリアル化するときに常にそれを初期化します。

null プロパティの初期化を回避する方法はありますか?

null の場合、MyList はシリアル化されたファイルにも記録されません。null 値でロードして再度保存すると、MyList は null ではなくなり、0 個の項目を持つ List<> としてシリアル化されますが、null ではありません。

ありがとう。

より詳しい情報:

IsDeserializing プロパティは、クラスの構造におけるいくつかのコード制限により実行できません

4

4 に答える 4

12

これはバグのように見えます...

プロパティを nullable としてマークしようとしても、うまくいかないようです。

[XmlArray(IsNullable = true)]
public List<MyObject> MyList { get; set; }

MyList プロパティを次のようにシリアル化します。

<MyList xsi:nil="true" />

そのため、XML はリストが null であることを明確に示していますが、逆シリアル化後も空のリストに初期化されています...

に置き換えるList<MyObject>MyObject[]、(なくてもIsNullable = true)正常に動作しますが、おそらくあなたが望むものではありません...

おそらくConnectでこれを報告する必要があります。

于 2010-02-03T00:07:27.887 に答える
-1

私は同じ問題を抱えていましたが、何も設定されていないプロパティに XmlArrayAttribute を追加すると、うまくいきました

public class MySerializableClass
{
    [XmlArray]
    public List<MyObject> MyList { get; set; }
}
于 2013-07-09T08:43:48.557 に答える
-1

そこにnullが必要な場合は、自動実装プロパティを使用しないでください。使用例

public class MySerializableClass 
{ 
    List<MyObject> myList 
    public List<MyObject> MyList { get {return myList;} set {myList = value;} } 
} 
于 2010-02-03T00:26:11.713 に答える