2011-12-02 4 views
0

XML로 직렬화 된 많은 개체가 있습니다. 이제는 그들을 deserialize하고 싶습니다. 그러나 주어진 XML 문자열에 대해 형식이 무엇인지 알지 못하기 때문에이를 수행하는 방법을 알 수 없습니다.알 수없는 형식의 개체를 역 직렬화

public static Task DeserializeFromXML(string value) 
{ 
    Task task = new Task(); 
    StringReader reader = new StringReader(value); 
    XmlSerializer serializer = new XmlSerializer(task.GetType()); 
    XmlReader xmlReader = new XmlTextReader(reader); 
    task = (Task)serializer.Deserialize(xmlReader); 
    return task; 
} 

XmlSerializer를 생성자 결국해야 할 역 직렬화 메소드로 전달 유형을 필요로하기 때문에 나는 혼란 스러워요 : 나는 (이 경우 작업) 유형을 알고 여기에 개체입니다 내가 사용하고있는 코드입니다 Object에서 단지 역 직렬화 한 것으로 캐스팅되었지만이 시점에서 그 유형이 무엇인지는 알 수 없습니다.

+1

.NET 1.1을 사용하고 있습니까? 그렇지 않다면,'new XmlTextReader()'대신'XmlReader.Create()'를 사용해야합니다. –

+0

처음에 알 수없는 유형의 인스턴스를 비 직렬화하는 이유는 무엇입니까? –

답변

1

XML serializer에는 직렬화 된 개체의 종류에 대한 정보가 없습니다. 스트레이트 XML을 사용하면이 문제를 해결할 방법이 없습니다. 오브젝트 유형은 직렬화에 포함되지 않습니다.

.NET의 일부 serializer (특히 NetDataContractSerializer)에는 미리 알지 못해도 특정 개체 유형을 재구성 할 수있는 충분한 정보가 포함되어 있습니다.

+0

필자는이 두 가지를 모두 작성하고 있으므로 XML을 사용하는 더 좋은 방법이 있다면 XML을 사용할 필요가 없습니다. 만약 내가 그것을 바이너리로 직렬화한다면, 나는 객체에 비 직렬화를 한 다음, 어떤 유형인지를 테스트 할 수있을 것이다 ("is"사용)? – Scott