приведение дочернего типа в качестве базового / родительского типа для сериализации - PullRequest
0 голосов
/ 31 января 2012

Я использую дочерний тип без каких-либо свойств для того, чтобы свободно применять правила проверки к объекту, когда он используется определенным образом.

so

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

public class myUser : User{}

Однако, когдаобъект попадает в мой сериализатор, я хочу сериализовать его в базовый тип.поэтому «Пользователь» является корневым элементом, а не «myUser».

1 Ответ

1 голос
/ 31 января 2012

Почему бы просто не привести его обратно к пользователю перед выполнением сериализации?

После некоторых копаний в 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", но не уверен, что это вызовет проблемы в процессе десериализации.

...