忽略列表中的属性的XmlIgnore。

问题描述 投票:1回答:1

我如何忽略我试图序列化的另一个类型的列表中的一个类型的属性?

        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属性在某些情况下被序列化,所以我不想直接在Tag类中设置XmlIgnore属性。所以我不想直接在Tag类中设置XmlIgnore属性。而且我不想使用GUID的nullable包装器。

我认为错误的地方在于我正在为类型CompanyDemoData创建一个序列化器,而这个序列化器并不包含我试图设置覆盖属性的属性。

先谢谢你

c# serialization xml-serialization xmlserializer xmlignore
1个回答
1
投票

这里的错误在于参数 member stringxOver.Add(typeof(Tag), "GUID", attrs).

你正在通过 XMLElement Name 不该 Member Name 是 "Guid "而不是 "GUID"。

这一行应该是 "Guid "而不是 "GUID"。xOver.Add(typeof(Tag), "Guid", attrs).

我已经测试过了,它的工作。希望对你有用!

© www.soinside.com 2019 - 2024. All rights reserved.