所有数据类型的条件XML
本文关键字:条件 XML 数据类型 | 更新日期: 2023-09-27 17:59:45
我正在尝试使用中提到的方法创建一个Conditional XML条件xml序列化
然而,在字符串的情况下,它可以很好地工作,但如果我添加另一种数据类型,如Int32
或float
,那么即使不给它分配任何值,默认值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中。
我想您的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;
}
}