XML序列化子类

Inf*_*ner 0 c# xml-serialization

我有一节课:

public abstract class BaseClass
{

}

public class FirstChild:BaseClass
{

}

public class SecondChild:BaseClass
{

}

public class Request
{
public BaseClass Child {get;set;}

}
Run Code Online (Sandbox Code Playgroud)

我在所有类上添加了serializable属性,并在Baseclass,firstchild和secondchild类中包含了XmlInclude.

I want to achieve this:
<Request>
   <FirstChild/>
</Request>
Run Code Online (Sandbox Code Playgroud)

要么

<Request>
   <SecondChild/>
</Request>
Run Code Online (Sandbox Code Playgroud)

我使用以下方法创建请求:

Request request = new Request();
request.Child = new FirstChild();
Run Code Online (Sandbox Code Playgroud)

然后序列化它.

但我一直这样:

<Request  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<Type  xsi:type="FirstChild">
</Type>

</Request>
Run Code Online (Sandbox Code Playgroud)

你能指出我做得对吗?

Mar*_*een 5

为此,您需要使用XmlArrayItem或XmlElement属性.此外,如果您希望子类实例成为子元素的子元素,则将Child属性视为长度为1的BaseClass []会更容易.

因此,您的课程将如下所示:

public abstract class BaseClass
{

}

public class FirstChild:BaseClass
{

}

public class SecondChild:BaseClass
{

}

public class Request
{
        [XmlArrayItem(Type = typeof(FirstChild), ElementName = "FirstChild")]
        [XmlArrayItem(Type = typeof(SecondChild), ElementName = "SecondChild")] 
        public BaseClass[] Child {get;set;}

}
Run Code Online (Sandbox Code Playgroud)

这将导致您正在寻找的XML.