XmlSerializer在序列化时忽略属性覆盖

时间:2018-09-03 13:32:40

标签: c# xml

我有一个复杂的图,每个属性都有一个自定义属性。有了对象后,我将遍历属性,检查自定义属性,并在必要时添加要忽略的属性:

var ignoreAttribute = new XmlAttributes() {
    XmlIgnore = true
};
var overrides = new XmlAttributeOverrides();

var objType = obj.GetType();
var properties = objType.GetProperties();

foreach (var property in properties)
{
    var attrib = property.GetCustomAttribute<ExportLevelAttribute>();
    if (!attrib.Values.Contains(level))
    {
        try
        {
            var element = property.GetCustomAttribute<XmlElementAttribute>();
            var name = element?.ElementName == string.Empty ? property.Name : element.ElementName;

            overrides.Add(property.PropertyType, name, ignoreAttribute);
        }
        catch { }

        continue;
    }
}

using (var stream = new MemoryStream())
using (var writer = new StreamWriter(stream, new UTF8Encoding(false)))
{
    var xml = new XmlSerializer(typeof(MyRootObject), overrides);
    xml.Serialize(writer, obj);

    return Encoding.UTF8.GetString(stream.ToArray());
}

正在将属性添加到替代中。但是,在序列化时,那些设置为忽略的属性仍在序列化。

我想念什么吗?

1 个答案:

答案 0 :(得分:1)

传递到type的{​​{1}}在XmlAttributeOverrides.Add级别工作,而不在object级别:XmlAttributeOverrides工作。

因此,当您添加替代时,请指定您之前获得的对象类型:

member