我有一个复杂的图,每个属性都有一个自定义属性。有了对象后,我将遍历属性,检查自定义属性,并在必要时添加要忽略的属性:
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());
}
正在将属性添加到替代中。但是,在序列化时,那些设置为忽略的属性仍在序列化。
我想念什么吗?
答案 0 :(得分:1)
传递到type
的{{1}}在XmlAttributeOverrides.Add
级别工作,而不在object
级别:XmlAttributeOverrides工作。
因此,当您添加替代时,请指定您之前获得的对象类型:
member