Alex Rivera | Logout

Conditional xml serialization

Asked 2010-11-04T08:43:27.473
23

I have the following C# classes :

public class Books
{

public List<Book> BookList;

}

public class Book
{

public string Title;
public string Description;
public string Author;
public string Publisher;

}

How can I serialize this class into the following XML?

<Books>
  <Book Title="t1" Description="d1"/>
  <Book Description="d2" Author="a2"/>
  <Book Title="t3" Author="a3" Publisher="p3"/>
</Books>

I want the XML to have only those attributes whose values are not null/empty. For example: In the first Book element, author is blank, so it should not be present in the serialized XML.

Edit
Report

1 Answer

8

Alternative :

  • Switch your public fields to properties
  • Define default values with the DefaultValueAttribute attribute
  • Define content property with the ContentPropertyAttribute attribute
  • Use XamlWriter/XamlReader

You end up with something like this:

 [ContentProperty("Books")]
 public class Library {

   private readonly List<Book> m_books = new List<Book>();

   public List<Book> Books { get { return m_books; } }

 }

 public class Book
 {

    [DefaultValue(string.Empty)]
    public string Title { get; set; }

    [DefaultValue(string.Empty)]
    public string Description { get; set; }

    [DefaultValue(string.Empty)]
    public string Author { get; set; }

 }
answered 2010-11-04T08:57:24.503

Your Answer