将子类型转换为序列化的基类型/父类型

时间:2012-01-31 12:28:51

标签: c# xml-serialization

我正在使用没有属性的子类型,以便在以特定方式使用对象时对该对象放置流畅的验证规则。

所以

public class User
{
    public string name {get;set;}
}

public class myUser : User{}

然而,当对象到达我的序列化器时,我希望它将它序列化为基类型。所以'用户'是根元素而不是'myUser'。

1 个答案:

答案 0 :(得分:1)

为什么不在执行序列化之前将其强制转换回用户?

在XmlSerializer中进行一些挖掘之后,这对我来说是这样的:

var myUser = new myUser();
myUser.Name = "Test name";
var serializer = new XmlSerializer(typeof(User), new Type[] {myUser.GetType()});
serializer.Serialize(Console.Out, myUser);

这里要做的是创建一个XmlSerializer,其中包含要插入的基本类型(在本例中为User),以及您想要允许的其他类型的数组。这些类型必须从基类型派生,看起来似乎。

输出:

<?xml version="1.0" encoding="ibm850"?>
<User xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org 2001/XMLSchema" xsi:type="myUser">
  <Name>Test name</Name>
</User>

请注意xsi:type="myUser",不确定这是否会导致反序列化过程出现问题。