[英]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.