在下面的代码片段中,我尝试反序列化在Animal
记录上具有类型属性的 XML,将它们标识为Cat
或Dog
,两者都继承自Animal
。
反序列化时,这些记录全部显示为Animal
.
然后,当尝试序列化该对象时(反序列化之后), 和xsi:type="Dog"
不会xsi:type="Cat"
出现在 XML 中。
我不确定这是否是由于我如何装饰类或在我的序列化器/反序列化器实现中造成的。如果可能的话,首选类中的解决方案而不是序列化器/反序列化器包装方法。
代码:
using System;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
namespace sandbox
{
public partial class Program
{
static void Main(string[] args)
{
string xml =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<OuterClass xmlns=\"http://myschema.com/\">" +
" <Animals>" +
" <Animal xmlns:xsi=\"http://myschema.com/\" xsi:type=\"Dog\">" +
" <Name>Watson</Name>" +
" <Height>10</Height>" +
" <Weight>10</Weight>" +
" <Paws>4</Paws>" +
" <Woof>True</Woof>" +
" </Animal>" +
" <Animal xmlns:xsi=\"http://myschema.com/\" xsi:type=\"Cat\">" +
" <Name>Hermy</Name>" +
" <Height>10</Height>" +
" <Weight>10</Weight>" +
" <Paws>4</Paws>" +
" <Meow>True</Meow>" +
" </Animal>" +
" </Animals>" +
"</OuterClass>";
OuterClass data = null;
try
{
data = DeserializeXml<OuterClass>(xml);
foreach (Animal curr in data.Animals) Console.WriteLine(curr.Name + ": " + curr.GetType().ToString());
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
Console.WriteLine(e.Message);
}
Console.WriteLine(SerializeXml(data));
Console.ReadLine();
}
倚天杖
慕丝7291255
相关分类