XmlIgnore для свойства внутри списка - PullRequest
1 голос
/ 08 мая 2020

Как игнорировать свойство, которое находится в типе в списке другого типа, который я пытаюсь сериализовать?

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

Я пытаюсь избежать свойства GUID для сериализации в определенных ситуациях. Поэтому я не хочу устанавливать атрибут XmlIgnore непосредственно в классе Tag. И я не хочу использовать обертку с нулевым значением для GUID.

Я думаю, что ошибка в том, что я создаю сериализатор для типа CompanyDemoData, который не содержит свойства, которое я пытаюсь установить переопределение атрибут.

Заранее спасибо!

1 Ответ

1 голос
/ 08 мая 2020

Ошибка здесь в аргументе member string в xOver.Add(typeof(Tag), "GUID", attrs).

Вы передаете XMLElement Name, а не Member Name, который является «Guid», а не «GUID».

Строка должна быть xOver.Add(typeof(Tag), "Guid", attrs).

Я проверил, работает. Надеюсь, вам понравится!

...