asp.net - C# で XMLSerilization 中に空の値を無視する方法は?

okwaves2024-01-25  12

DB からデータを取得しています。 DBObject データに null ではない空の値 ("") がある場合、その値を XML シリアル化から除外したいと考えています。

  EventComment event = new EventComment();
        event.Comments = datalogic.GetComment();

    if(event.Comments != String.Empty){
    //Add Logic
    }
SerializeToXmL(event)
    //dataLogic Class
        public string GetComment()
                {
                    var datalink = _unitOfWork.GetRepository<tbl1>()
                                 .GetFirstOrDefault(predicate: source => (source.id == id));
        
        
                    return datalink .comment;
                }

null 値を使用できることはわかっていますが、変数に null 値を代入したくありません。 null から別のソリューションを取得できますか。 XML シリアル化後、現時点では空のタグが取得されています。

<comment/>

あなたが連載しているものは何ですか?それは null ですか、それとも空 ("") ですか?

– マーク・グラベル

2020 年 9 月 3 日 9:17

シリアライズ中 ( " ")。

– ニーラジ・クマール

2020 年 9 月 3 日 9:18



------------------------

null 値はすでに除外されています。空の文字列 ("") を無視することについて話している場合は、「条件付きシリアル化」になります。あなたの友だちです。多くのシリアライザー (XmlSerializer を含む) は、よく知られたパブリック bool ShouldSerialize*() パターンを通じてこれをサポートしています。例:

public class Foo
{
    [XmlElement("comment")]
    public string Comment { get; set; }

    public bool ShouldSerializeComment() => !string.IsNullOrEmpty(Comment);
}

これを空の Comment でシリアル化すると、Comment メンバーはシリアル化されません。これを簡単に拡張して、たとえば次のような他のロジックを適用することができます。

public bool ShouldSerializeComment() => !string.IsNullOrWhiteSpace(Comment);

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。