2010-03-10 4 views
1

당신은 내가 동적으로 할당하고 복잡한 객체를 변경해야

지금까지 내가 필요한 모든 것을 할 수 있었던 한 System.Xml.Serialization.XmlAttributeOverrides를 사용하여 런타임에 속성을 C#을에 XmlAttributeOverrides 수집을 반복 할 수 있습니다.

내 질문 하나는 이미 컬렉션이 추가 된 것을 확인하기 위해 컬렉션을 반복 할 수 있습니까?

그리고이 컬렉션을 통해 중계 할 수없는 경우 두 개의 XmlAttributeOverrides 컬렉션을 결합하여 완전한 하나의 양식을 만들 수 있습니까?

감사합니다.

답변

0

편리하지 않습니다.

당신은 인덱서를 사용하여 당신이을 기대 유형의 값을 얻을 수 있습니다 - yourOverrides[type] 또는 yourOverrides[type, memberName] 중 -하지만 모든 데이터가 내부 (는 API에 노출되지 않음) 반사를 필요로 의 목록을 가져옵니다. 검사

(이 취성 있지만), (Type 의해 키잉)를 Hashtable이다 types 불리는 필드가있다. Hashtable에있는 각 객체는 a Hashtable (구성원 이름으로 키 입력하고 유형 자체 설정에는 "")입니다. XmlAttributeOverrides 유사 당신은 XmlAttributeOverridesBuilder 클래스를 만들 수

1

행운을 빕니다, 당신은 몇 가지 핫픽스 또는 새로운 .NET 버전을 적용 할 때 큰 힙 떨어지면 저를 비난하지 않는다 ..., 것입니다 포함 된 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 
     // ... 
    } 
} 
관련 문제