2012-01-31 2 views
0

속성을 사용하지 않는 자식 형식을 사용하여 특정 방식으로 사용할 때 유창한 유효성 검사 규칙을 개체에 배치하고 있습니다. 개체 내 시리얼 라이저에 도달 할 때 너무직렬화를위한 기본/부모 형식으로 자식 형식을 캐스트하십시오.

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

public class myUser : User{} 

그러나 나는 그것이 기본 유형에에는 직렬화하고 싶다. 그래서 'User'는 'myUser'가 아닌 루트 요소입니다.

+1

이해가 안됩니다. 기본 유형의 모든 구성원을 상속하는 유형은 유창한 유효성 검사 규칙에 어떻게 도움이됩니까? – svick

+1

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

+1

하지만 그건 상속에 대해서는 아무 말도하지 않습니다. 사실'User'가 모든 속성을 가진 유형이면, 기본 유형의 멤버를 파생 된 유형에서 제거 할 수 없기 때문에 'myUser'는 이러한 종류의 유효성 검사에 쓸모가 없습니다. myUser'는'User'만으로는 성취 할 수없는 목적은 무엇입니까? – 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

내 대답이 실제로 작동 할 수있는 것으로 업데이트되었습니다. :) –

관련 문제