繁体   English   中英

您可以迭代C#中的XmlAttributeOverrides集合吗

[英]Can you iterate over the XmlAttributeOverrides collection in c#

我必须在运行时使用System.Xml.Serialization.XmlAttributeOverrides动态分配和更改复杂的对象属性

到目前为止,我已经能够做我需要的一切。

我的一个问题是如何遍历集合以查看已添加的内容?

而且,如果我无法遍历此集合,可以加入两个XmlAttributeOverrides集合以形成一个完整的集合。

谢谢

您可以创建一个XmlAttributeOverridesBuilder类,类似于XmlAttributeOverrides ,它可以使您更好地控制其包含的XmlAttributes。 这样,您可以处理XmlAttributeOverridesBuilder实例,并在必要时将其合并,并在需要实际XmlAttributeOverrides实例时调用GetOverrides方法。

public class XmlAttributeOverridesBuilder
{
    private Dictionary<Type, Dictionary<string, XmlAttributes>> _entries;

    public XmlAttributeOverridesBuilder()
    {
        _entries = new Dictionary<Type, Dictionary<string, XmlAttributes>>();
    }

    public void Add(Type type, XmlAttributes attributes)
    {
        Add(type, String.Empty, attributes);
    }

    public void Add(Type type, string member, XmlAttributes attributes)
    {
        Dictionary<string, XmlAttributes> typeEntries;
        if (!_entries.TryGetValue(type, out typeEntries))
        {
            typeEntries = new Dictionary<string, XmlAttributes>();
            _entries[type] = typeEntries;
        }
        typeEntries[member] = attributes;
    }

    public XmlAttributeOverrides GetOverrides()
    {
        XmlAttributeOverrides overrides = new XmlAttributeOverrides();
        foreach(var kvpType in _entries)
        {
            foreach(var kvpMember in kvpType.Value)
            {
                overrides.Add(kvpType.Key, kvpMember.Key, kvpMember.Value);
            }
        }
        return overrides;
    }

    public XmlAttributeOverridesBuilder Combine(XmlAttributeOverridesBuilder other)
    {
        // combine logic to build a new XmlAttributeOverridesBuilder
        // ...
    }
}

不方便,不。

您可以通过使用索引得到你所期望类型的值-无论是yourOverrides[type]yourOverrides[type, memberName] -但要获得里面的所有数据的列表将需要反思(它没有暴露在API)。

通过检查(尽管这很脆弱),存在一个称为types的字段,该字段是一个Hashtable (由Type键)。 Hashtable中的每个对象本身就是一个Hashtable (由成员名键入,类型自己的设置带有"" )。

祝您好运,当您应用一些修补程序或新的.NET版本时,如果它掉进了大堆,请不要怪我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM