将子类型强制转换为用于序列化的基/父类型

本文关键字:类型 序列化 父类 用于 转换 | 更新日期: 2023-09-27 18:21:55

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

所以

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

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

将子类型强制转换为用于序列化的基/父类型

为什么不在进行序列化之前简单地将其转换回用户?

在 XmlSerializer 中进行了一些挖掘后,这为我做到了:

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

这里所做的是创建一个具有要强制转换为的基本类型(在本例中为 User(的XmlSerializer,以及要允许的其他类型的数组。这些类型似乎必须从基类型派生。

输出:

<?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",不确定这是否会导致反序列化过程出现问题。