XmlIgnore on a 属性 inside a list

XmlIgnore on a property inside a list

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

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

我认为错误是我正在为类型 CompanyDemoData 创建一个序列化程序,它不包含我试图设置覆盖属性的 属性。

提前致谢!

这里的错误在xOver.Add(typeof(Tag), "GUID", attrs)中的参数member string

您传递的是 XMLElement Name 而不是 Member Name,后者是 "Guid" 而不是 "GUID"。

该行应该是 xOver.Add(typeof(Tag), "Guid", attrs).

我已经测试过它并且有效。希望对你有用!