가장 쉬운 방법은 개별적으로 직렬화를 제어하는 것입니다. XmlElement 특성에 대한 별칭을 찾았지만 비슷한 것을 보지 못했습니다. 또한 객체를 다시 직렬화하면 사용할 태그를 어떻게 알 수 있습니까?
두 번째 개체에서 deserialize하면 코드에서 첫 번째 클래스의 새 인스턴스를 만들고 속성을 복사하는 것이 어렵지 않습니다.
이렇게하면 독서 능력이 뛰어난 수업을 만들 수 있지만이 수업을 쓰기에는 사용하지 말아야합니다. 그렇지 않으면 모든 속성이 작성됩니다.
VB.NET
<XmlRoot("PersonList")> _
Public Class PersonList
<XmlElement("person")> _
Public Property People() As Person()
Get
Return m_People
End Get
Set
m_People = Value
End Set
End Property
Private m_People As Person()
End Class
Public Class Person
Private _name As String
<XmlElement("name")> _
Public Property Name() As String
Get
Return _name
End Get
Set
_name = value
End Set
End Property
<XmlElement("name_person")> _
Public Property NamePerson() As String
Get
Return _name
End Get
Set
_name = value
End Set
End Property
End Class
C#을
[XmlRoot("PersonList")]
public class PersonList {
[XmlElement("person")]
public Person[] People { get; set; }
}
public class Person {
private String _name;
[XmlElement("name")]
public String Name {get{return _name;} set{_name = value;}}
[XmlElement("name_person")]
public String NamePerson {get{return _name;} set{_name = value;}}
}
참조 : 원본 클래스를 사용하지만, 다음 XmlSerializer.UnknownElement 이벤트를 처리 할 수있는 것처럼 XML deserialize: different xml schema maps to the same C# class
다른 방법으로는, 그것은 보인다.
(안된) VB.Net는
Private Shared Sub serializer_UnknownElement(sender As Object, e As XmlElementEventArgs)
Dim target = DirectCast(e.ObjectBeingDeserialized, Person)
If e.Element.Name = "name_person" Then
target.Name = e.Element.InnerText
End If
End Sub
C#
static void serializer_UnknownElement(object sender, XmlElementEventArgs e)
{
var target = (Person) e.ObjectBeingDeserialized;
if(e.Element.Name == "name_person")
{
target.Name = e.Element.InnerText;
}
}
그러나 다시, 이것은 당신이로 이전 형식에서 이전 형식으로 다시에만 부하를 저장하지 것이다 새로운 수업.
참조 : http://weblogs.asp.net/psteele/archive/2011/01/31/xml-serialization-and-the-obsolete-attribute.aspx
참조 : http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.unknownelement.aspx
출처
2013-07-23 18:17:24
Ted
File-> String-> XMLObject를 사용하는 경우 문자열 함수를 사용하여 태그를 수정할 수 있습니다. – rheitzman
내 속성 클래스에서 읽을 수있는 파일 형식을 결정하고 검색 할 태그 이름을 알릴 수 있습니까? 예 : 만약 FileName = "xml1"이면 _ else _ –
user2092583