2013-07-30 78 views
4

我正在使用XmlSerializer执行Xml序列化。我正在执行ClassA的序列化,其中包含ClassB类型的名为MyProperty的属性。我不希望ClassB的特定属性被序列化。我不得不使用XmlAttributeOverrides作为类在另一个库中。 如果该物业本身是ClassA,那本来就很简单。忽略Xml中属性的属性使用XmlSerializer在.NET中进行序列化

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

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

如何完成,如果该属性是ClassB,我们需要序列ClassA

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

主要方法:

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

    Console.WriteLine(ToXml(classA)); 
} 

输出这个与“ThePropertyNameToIgnore”省略:

<?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> 
相关问题