2013-02-18 34 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