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)
你能指出我做得对吗?
为此,您需要使用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.
| 归档时间: |
|
| 查看次数: |
4085 次 |
| 最近记录: |