2013-02-18 37 views
1

我试图创建一个条件XML,使用 Conditional xml serialization条件XML对所有数据类型

然而上述的方法,它工作完全正常的字符串的情况下,但如果我添加另一种数据类型,如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); 

,这是我

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

我想,在第一种情况下,IntValue属性不应该出现在第二行,Float值应该不是我的XML是那里的XML 。

回答

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; 
    } 
} 
+0

感谢@jbl,它现在是我想要的。 – Pankaj 2013-02-18 09:34:20