【问题标题】:Conditional XML for All Data Types所有数据类型的条件 XML
【发布时间】:2013-02-18 08:41:03
【问题描述】:

我正在尝试使用中提到的方法创建一个条件 XML Conditional xml serialization

但是,在字符串的情况下它工作得非常好,但是如果我添加另一种数据类型,例如 Int32float,那么即使没有为其分配任何值,默认值 0 也会插入到 XML 中。

这是我的代码。

public class Books
{
    public String BookName;
    [XmlElement("Book")]
    public List<Book> BookList;
}

public class Book
 {
    [XmlAttribute] public string Title {get;set;}
    public bool ShouldSerializeTitle() {
        return !string.IsNullOrEmpty(Title);
    }

    [XmlAttribute] public Single FloatValue { get; set; }
    public bool ShouldSerializeisFloatValue()
    {
       if (FloatValue == 0.0)
         return false;
       return true;
    }     

    [XmlAttribute] public Int32 IntValue { get; set; }
    public bool ShouldSerializeInt32()
    {
      if (IntValue <= 0)
        return false;
      return true;
    }
}

这就是我使用它的方式。

Books books = new Books();
books.BookList = new List<Book>();
books.BookName = "My Book";

Book book1 = new Book();
book1.Title = "t1";
book1.FloatValue = 1.0F;
books.BookList.Add(book1);

Book book2 = new Book();
book2.Description = "d2";
book2.IntValue = 12;
books.BookList.Add(book2);

var serializer = new XmlSerializer(books.GetType());
String xmlFileName = @"C:/Test.xml";
TextWriter writer = new StreamWriter(xmlFileName);
serializer.Serialize(writer, books);

这是我得到的 XML

-<Books>
<BookName>My Book</BookName>
<Book IntValue="0" FloatValue="1" Title="t1"/>
<Book IntValue="12" FloatValue="0" Description="d2"/>
</Books>

我希望在第一种情况下,IntValue 属性不应该存在,而在第二行,Float 值不应该存在于我的 XML 中。

【问题讨论】:

    标签: c# xml-serialization


    【解决方案1】:

    我猜您的 ShouldSerialize* 方法名称应该是这样的(它们与您代码中的属性名称不匹配):

     [XmlAttribute] public Single FloatValue { get; set; }
        public bool ShouldSerializeFloatValue()
        {
           if (FloatValue == 0.0)
             return false;
           return true;
        }     
    
        [XmlAttribute] public Int32 IntValue { get; set; }
        public bool ShouldSerializeIntValue()
        {
          if (IntValue <= 0)
            return false;
          return true;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-04
      • 2014-08-14
      • 2022-06-30
      • 2018-11-03
      相关资源
      最近更新 更多