KWC
KWC

Reputation: 169

XmlIgnore on a property inside a list

How do I ignore the property which is in a type within a list of another type which I am trying to serialize?

        public string SerializeTag(List<Tag> reservedTags)
    {
        string timestampFilenamePrefix = DateTime.Now.ToString("yyyyMMddHHmmss");
        string filename = string.Format("ReservedTags_{0}.xml", timestampFilenamePrefix);
        using (var stream = File.Create(filename))
        {
            var objectToBeSerialized = new CompanyDemoData();
            objectToBeSerialized.TagsReserved = reservedTags;

            var namespaces = new XmlSerializerNamespaces();
            namespaces.Add("", "");

            XmlAttributeOverrides xOver = new XmlAttributeOverrides();
            XmlAttributes attrs = new XmlAttributes();
            attrs.XmlIgnore = true;
            xOver.Add(typeof(Tag), "GUID", attrs);

            var serializer = new XmlSerializer(typeof(CompanyDemoData), xOver);
            serializer.Serialize(XmlWriter.Create(stream), objectToBeSerialized, namespaces);

            stream.Flush();
            return filename;
        }
    }
{
    [XmlRoot("CompanyDemoData")]
    public class CompanyDemoData
    {
        [XmlElement("Tag")]
        public List<Tag> TagsReserved { get; set; }
    }
}
namespace Demo.Model
{
    public class Tag
    {
        [XmlElement("TagId")]
        public int ID { get; set; }

        [XmlElement("GUID")]
        public Guid Guid { get; set; }
    }
}

I am trying to avoid the GUID property to be serialized under certain situations. So I don't want to set the XmlIgnore attribute directly in the Tag class. And I don't want to use the nullable wrapper for GUID.

I think the error is that I am creating a serializer for the type CompanyDemoData which doesn't contain the property which I am trying to set the override attribute.

Thanks in advance!

Upvotes: 1

Views: 212

Answers (1)

George Kerwood
George Kerwood

Reputation: 1306

The error here is in the argument member string in xOver.Add(typeof(Tag), "GUID", attrs).

You are passing the XMLElement Name not the Member Name which is "Guid" not "GUID".

The line should be xOver.Add(typeof(Tag), "Guid", attrs).

I've tested it and it works. Hope it does for you!

Upvotes: 1

Related Questions