簡體   English   中英

XmlSerializer 在序列化時忽略屬性覆蓋

[英]XmlSerializer ignoring attribute overrides when serializing

我有一個復雜的圖形,每個屬性都有一個自定義屬性。 一旦我有了一個對象,我就會遍歷屬性,檢查自定義屬性,並在必要時添加要忽略的屬性:

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());
}

正在將屬性添加到覆蓋中。 但是,在序列化時,那些設置為忽略的屬性仍在序列化。

我錯過了什么嗎?

傳遞給XmlAttributeOverrides.Addtype適用於object級別,而不是member級別: XmlAttributeOverrides

因此,當您添加覆蓋時,請指定您之前獲得的對象類型:

overrides.Add(objType, name, ignoreAttribute);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM