2012-01-31 2 views
0

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

так

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

public class myUser : User{} 

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

+1

Не понимаю. Как тип, который наследует всех членов базового типа, помогает вам с плавными правилами проверки? – svick

+1

http://stackoverflow.com/questions/9068134/controller-input-validation-in-mvc-api/9068366#9068366 – Jules

+1

Но это ничего не говорит о наследовании. Фактически, если 'User' является типом, который имеет все свойства, то' myUser' бесполезен для такого рода проверки, потому что члены базового типа не могут быть удалены в производном типе. Какую цель выполняет «myUser», которая не может быть выполнена, просто используя «Пользователь»? – svick

ответ

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 с базового типа (Пользователь в этом случае) вы хотите бросить в, а также массив других типов, которые вы хотите разрешить. Казалось бы, эти типы должны быть получены из базового типа.

Выход:

<?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", не уверен, если это вызовет проблемы для вашего процесса десериализации.

+1

Я пробовал это. Он не работает, экземпляр остается дочерним. – Jules

+0

Это интересно, и я прошу прощения за неправильный ответ. Надеемся на правильный ответ. –

+0

Обновлен мой ответ с чем-то, что действительно может работать. :) –

Смежные вопросы