2013-07-30 1 views
4

XmlSerializer을 사용하여 XML을 세리하고 있습니다. ClassA의 serialization을 수행하고 있는데 MyPropertyClassB이라는 속성이 들어 있습니다. ClassB의 특정 속성을 직렬화하고 싶지 않습니다.XmlSerializer를 사용하여 .NET에서 Xml Serialization의 속성을 무시하십시오.

클래스가 다른 라이브러리에 있으므로 XmlAttributeOverrides을 사용해야합니다. 속성이 ClassA 인 경우 간단했을 것입니다. 속성이 ClassB에 우리가 ClassA를 직렬화해야하는 경우

XmlAttributeOverrides xmlOver = new XmlAttributeOverrides(); 
XmlAttributes xmlAttr = new XmlAttributes(); 
xmlAttr.XmlIgnore = true; 
xmlOver.Add(typeof(ClassA), "MyProperty", xmlAttr); 

XmlSerializer ser = new XmlSerializer(typeof(ClassA), xmlOver); 

어떻게 달성 하는가?

+0

나는 항상 다른 경우에 대한 ClassB''에서 속성을 무시하지 않으 받아? 그렇지 않으면'[XmlIgnore]'로'ClassBy.PropertyToIgnore'를 꾸미는 것만 큼 간단합니까? –

+0

예 @ChrisSinclair, 맞습니다. – Brij

답변

4

당신은 거의 그것을 가지고, 단지 ClassB 대신 ClassA를 가리 키도록 재정의를 업데이트 : 주어진

XmlAttributeOverrides xmlOver = new XmlAttributeOverrides(); 
XmlAttributes xmlAttr = new XmlAttributes(); 
xmlAttr.XmlIgnore = true; 

//change this to point to ClassB's property to ignore 
xmlOver.Add(typeof(ClassB), "ThePropertyNameToIgnore", xmlAttr); 

XmlSerializer ser = new XmlSerializer(typeof(ClassA), xmlOver); 

빠른 테스트를 :

public class ClassA 
{ 
    public ClassB MyProperty { get; set; } 
} 

public class ClassB 
{ 
    public string ThePropertyNameToIgnore { get; set; } 
    public string Prop2 { get; set; } 
} 

및 내보내기 방법 :

public static string ToXml(object obj) 
{ 
    XmlAttributeOverrides xmlOver = new XmlAttributeOverrides(); 
    XmlAttributes xmlAttr = new XmlAttributes(); 
    xmlAttr.XmlIgnore = true; 
    xmlOver.Add(typeof(ClassB), "ThePropertyNameToIgnore", xmlAttr); 


    XmlSerializer xs = new XmlSerializer(typeof(ClassA), xmlOver); 
    using (MemoryStream stream = new MemoryStream()) 
    { 
     xs.Serialize(stream, obj); 
     return System.Text.Encoding.UTF8.GetString(stream.ToArray()); 
    } 
} 

Main 메서드 "ThePropertyNameToIgnore"와

void Main() 
{ 
    var classA = new ClassA { 
     MyProperty = new ClassB { 
      ThePropertyNameToIgnore = "Hello", 
      Prop2 = "World!" 
     } 
    }; 

    Console.WriteLine(ToXml(classA)); 
} 

출력이 생략 :

<?xml version="1.0"?> 
<ClassA xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <MyProperty> 
    <Prop2>World!</Prop2> 
    </MyProperty> 
</ClassA> 
관련 문제