子类名称是否也可以出现在xml输出中

时间:2014-02-07 07:44:52

标签: c# xml xmlserializer

我有以下示例C#代码:

public class child {
    public string mem {get; set;}
}
public class parent {
    public child myChild { get; set;}
    public string parmem {get; set;}
    public parent() {
        parmem = "I AM PARENT" ;
        myChild = new child();
        myChild.mem = "I AM  CHILD";
    }
}

class prog {
     static void Main() {
         parent par = new parent() ;
         TextWriter write = new StreamWriter("MyClass.xml");

         XmlSerializer ser = new XmlSerializer(par.GetType());
         ser.Serialize(write, par);
         write.Close();
    }
}   

现在,我正在尝试通过XmlSerializer序列化类'parent'的对象。 我的输出看起来像:

<parent xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <myChild>
        <mem>I AM CHILD</mem>
    </myChild>
    <parmem>I AM PARENT</parmem>
</parent>

我想要的是如下:

<parent xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    **<child >
        <myChild>
            <mem>I AM CHILD</mem>
        </myChild>
    </child>**
    <parmem>I AM PARENT</parmem>
</parent>

因此,我希望子类的名称也出现在xml输出中。 请告诉我是否可以这样做。

1 个答案:

答案 0 :(得分:0)

如果您希望在<myChild>之后<child>元素中添加XmlSerialization元素,则需要声明List<child>属性而不是单个child属性parent上课。

e.g。

public class parent {
    [XmlArray("child")]
    [XmlArrayItem("mychild")]
    public List<child> myChilds { get; set;}
    public string parmem {get; set;}
    public parent() {
        parmem = "I AM PARENT" ;
        myChilds = new List<child>();
        myChilds.Add(new child() {mem  = "I AM  CHILD"} ); 
    }
}

<强>输出

<?xml version="1.0" encoding="utf-8"?>
<parent xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <child>
    <mychild>
      <mem>I AM  CHILD</mem>
    </mychild>
  </child>
  <parmem>I AM PARENT</parmem>
</parent>