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

C# 将子类型强制转换为序列化的基/父类型,c#,xml-serialization,C#,Xml Serialization,我正在使用一个没有属性的子类型,以便在以特定方式使用对象时,在对象上放置fluent验证规则 所以 但是,当对象到达我的serialiser时,我希望它将其序列化为基类型。因此,“User”是根元素,而不是“myUser”。为什么不在进行序列化之前将其强制转换回User 在对XmlSerializer进行了一些深入研究之后,我做到了: var myUser = new myUser(); myUser.Name = "Test name"; var serializer = new XmlSer

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

所以

但是,当对象到达我的serialiser时,我希望它将其序列化为基类型。因此,“User”是根元素,而不是“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);
这里要做的是创建一个
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”
,不确定这是否会导致反序列化过程出现问题。

我尝试了这个方法。它不起作用,实例仍然是子类型。这很有趣,我很抱歉给出了错误的答案。期待得到有关此问题的正确答案。更新了我的答案,其中包含了一些实际可行的内容。:)与其写
newuser().GetType()
,不如写
typeof(User)
。我不明白。从基类型继承所有成员的类型如何帮助您使用流畅的验证规则?但这并不是说继承。事实上,如果
User
是具有所有属性的类型,那么
myUser
对于这种验证是无用的,因为在派生类型中不能删除基类型的成员。
myUser
的作用是什么?仅仅使用
User
无法实现?fluentvalidation要求您为每个类创建规则。我想将用户作为输入参数传递给不同的控制器操作。createUser操作需要deleteuser操作的不同成员。因此,我创建了两个子类,其中定义了规则。这些操作需要子类。但是,一旦验证完成,我希望将其转换回父级,因为这是xml serialiser所期望的。
<?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>