2010-08-06 3 views
0

이의 난을 가정하자 처리 된 XML 직렬화 된 인스턴스는 같은 클래스를 가지고있다. XML이 직렬화되고 모든 것이 잘됩니다. 지금은 프로필의 크기를 줄이고 자, 나는 짧은 무언가에 의해 로 propertyNames를 교체하려면 :변경 클래스 서명,

public class SomeObject 
{ 
    [XmlElement("id")] 
    public Guid InternalId { get; set; } 
    [XmlElement("ad")] 
    public string Address { get; set; } 
} 

새로운 객체 직렬화 잘, 짧은, 그리고 모든 것을 얻을. 그러나 XmlSerializer은 이전 XML 파일을 deserialize 할 수 없습니다. 클래스 서명을 변경하는 데 적용 할 수있는 후크가 있지만 이전 인스턴스를 deserialize 할 수는 있습니다.

나는 eventhandler XmlSerializer_UnknownElement을 가지고있다. 그런 다음 대상 속성의 값을 직접 설정할 수는 있지만 요소의 값은 문자열로만 설정할 수 있으므로 오류가 발생하기 쉽습니다.

답변

1

2 개의 대답, 내가 아는 사람이 잘 작동하는지, 다른 하나는 확실하지 않습니다.

1) 클래스에 IXmlSerializable 인터페이스를 구현하십시오. 매우 쉽게 수행 할 수 있으며 클래스가 직렬화 및 역 직렬화되는 방식을 완벽하게 제어 할 수 있습니다.

http://msdn.microsoft.com/en-us/library/system.xml.serialization.ixmlserializable.aspx

2) 확실하지 않음이 작동하지만 클래스의 속성에 다른 XmlElementAttribute 태그를 추가하려고합니다합니다. 컴파일되지만, 작동하는지 확실하지 않습니다.

public class SomeObject 
{ 
    [XmlElement("InternalId")] 
    [XmlElement("id")] 
    public Guid InternalId { get; set; } 
    [XmlElement("Address")] 
    [XmlElement("ad")] 
    public string Address { get; set; } 
} 
+0

Double'XmlElements'는 (는)'XmlChoiceIdentifier'를 제공하기 위해 작동합니다. 이 모든 코드를 직접 작성하는 것은 최후의 수단입니다. 나는 이것을 UnknownElement로 해결하지만 해키가됩니다. –