1. ホーム
  2. c#

[解決済み] null可能なintをシリアライズする

2023-02-17 01:34:54

質問

xml要素としてシリアライズするために、nullable int?データ型を設定したクラスがあります。 値がNULLの場合、xmlシリアライザが要素をシリアライズしないように設定する方法はありますか?

System.Xml.Serialization.XmlElement(IsNullable=false)] 属性を追加しようとしましたが、実行時にシリアライズ例外が発生し、型の反映にエラーがあることがわかりました。System.Int32' 型を使用するか、XmlElement 属性から IsNullable プロパティを削除することを検討してください(")。

[Serializable]
[System.Xml.Serialization.XmlRoot("Score", Namespace = "http://mycomp.com/test/score/v1")]
public class Score
{
    private int? iID_m;
    ...

    /// <summary>
    /// 
    /// </summary>        
    public int? ID 
    { 
        get 
        { 
            return iID_m; 
        } 
        set 
        { 
            iID_m = value; 
        } 
    }
     ...
}

上記のクラスがシリアライズされるのは

<Score xmlns="http://mycomp.com/test/score/v1">
    <ID xsi:nil="true" />
</Score>

しかし、NULLであるIDについては、私はID要素をまったく欲していません。主に、MSSQLでOPENXMLを使用すると、次のような要素に対してNULLではなく0が返されるからです。

どのように解決するのですか?

XmlSerializerは ShouldSerialize{Foo}() パターンをサポートしているので、メソッドを追加することができます。

public bool ShouldSerializeID() {return ID.HasValue;}

また {Foo}Specified パターンもありますが、XmlSerializer がこれをサポートしているかどうかはわかりません。