6

私はこのようなオブジェクトを持っています、

public class UserObj
{
    public string First {get; set;}
    public string Last  {get; set;}
    public addr Address {get; set;}

}

public class addr
{
    public street {get; set;}
    public town   {get; set;}
}

XmlSerializerを使用していて、通りと町が空の場合、XML出力でこれを取得します。

 <Address />

この空のタグを出力しない方法はありますか?

ありがとう

4

4 に答える 4

6

ShouldSerializeAddressAddressプロパティをシリアル化する必要があるかどうかを決定するメソッドを実装できます。

public bool ShouldSerializeAddress()
{
    return Address != null
        && !String.IsNullOrEmpty(Address.street)
        && !String.IsNullOrEmpty(Address.town);
}

このシグニチャを持つメソッドが存在する場合、シリアライザはプロパティをシリアル化する前にそれを呼び出します。

AddressSpecifiedまたは、同じ役割を持つプロパティを実装することもできます。

public bool AddressSpecified
{
    get
    {
        return Address != null
            && !String.IsNullOrEmpty(Address.street)
            && !String.IsNullOrEmpty(Address.town);
    }
}
于 2010-06-02T14:41:53.513 に答える
2

IXmlSerializableシリアル化ルーチンを自分で実装および実装できます。このようにして、要素を回避できます。

ここでの例:http://paltman.com/2006/jul/03/ixmlserializable-a-persistable-example/

于 2010-06-02T13:36:31.960 に答える
0

プロパティにDefaultValue属性を追加することで、空の値を削除できます。プロパティの値がデフォルト値と一致する場合、シリアル化されません。シリアル化を排除するには、デフォルト値をnullに設定します。次に例を示します。


using System.ComponentModel;
public class UserObj
{
    public string First {get; set;}
    public string Last  {get; set;}

    [DefaultValue(null)]
    public addr Address {get; set;}

}
于 2010-06-14T21:37:01.647 に答える
0

アドレスフィールドにnull値を割り当てるとうまくいくと思います。

于 2016-06-06T23:03:49.477 に答える