代码之家  ›  专栏  ›  技术社区  ›  Ivan-Mark Debono

序列化时忽略属性重写的XmlSerializer

  •  2
  • Ivan-Mark Debono  · 技术社区  · 6 年前

    我有一个复杂的图形,每个属性都有一个自定义属性。一旦有了对象,我就遍历属性,检查自定义属性,如有必要,添加要忽略的属性:

    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 回复  |  直到 6 年前
        1
  •  1
  •   Parrish Husband    6 年前

    这个 type XmlAttributeOverrides.Add 工作地点 object member 级别: XmlAttributeOverrides .

    overrides.Add(objType, name, ignoreAttribute);