2017-02-16 1 views
1

역 직렬화 중에 속성을 무시하려면 어떻게해야합니까? 필자의 경우, FullName 속성을 전혀 초기화하지 않기를 바란다. 나는 [XMLIgnore] 솔루션을 찾고 있지 않습니다 - 클래스를 변경할 수있는 액세스 권한이없는 시나리오라고 생각하십시오. 여기C# XML XML의 비 직렬화, 데이터 무시

public class Person 
{ 
    public int Id { get; set; } 
    public string FullName { get; set; } 
} 

내가 초기화하고 방법은 다음과 같습니다 : 여기

내 클래스의

Person p1 = new Person() { Id = 1, FullName = "P1" }; 
Person p2 = new Person() { Id = 2, FullName = "P2" }; 
List<Person> persons = new List<Person> { p, q }; //this object is xml serialized. 

을 그리고 여기 내 XML의 :

<?xml version="1.0" encoding="utf-8"?> 
<ArrayOfPerson xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Person> 
    <Id>1</Id> 
    <FullName>P1</FullName> 
    </Person> 
    <Person> 
    <Id>2</Id> 
    <FullName>P2</FullName> 
    </Person> 
</ArrayOfPerson> 
+0

매우 실용적인 솔루션 (실제 코드에 너무 많은 속성이없는 경우)은 새로운 _temporary_ 클래스를 만드는 것입니다 (예 : Person2는 무시할 필드를 제외한 모든 필드를 포함합니다. 그것을 직렬화에 사용하십시오. 비 직렬화하는 동안 원래 클래스를 사용할 수 있습니다. 무시 된 값을 null로 남겨 둡니다. 그러나 XML에서 클래스 이름이 중요한 경우이 제안은 유용하지 않습니다. –

+0

첫 제안을하지 않으면 도움이 될 수 있습니다. [xml serialization 중에는 속성을 무시하지만 deserialization 중에는 속성을 무시] (http://stackoverflow.com/a/18242538/6741868). 동일한 Override 메소드의 또 다른 예는 [XML에 직렬화 할 때 속성 무시] (0120-388-9800) –

+0

입력에 대한 감사하지만 XMLAttributeOverrides는 XML의 요소 이름이 클래스 속성 이름과 다릅니다. – Sekhar

답변

2

(필자는 XML 직렬화하지만 그것을 가지고) 당신 deserialization 프로세스에서 사용자 지정 XmlReader를 사용하여 FullName 요소를 건너 뛸 수 있습니다. 이런 식으로 뭔가 :

public class MyXmlReader : XmlTextReader 
{ 
    public MyXmlReader(string filePath) : base(filePath) 
    { 
    } 

    public override bool Read() 
    { 
     if (base.Read()) 
     { 
      if (Name == "FullName") 
       return base.Read(); 

      return true; 
     } 

     return false; 
    } 
} 

그런 다음 당신은 당신이 어떤 스트림 또는를 취할 다른 생성자를 구현할 수있는이

var serializer = new XmlSerializer(typeof(List<Person>)); 

using (var reader = new MyXmlReader("XMLFile.xml")) 
{ 
    var person = (List<Person>)serializer.Deserialize(reader); 
} 

처럼 사용합니다. 파일 경로 일 필요는 없습니다.

+0

정말 고마워요! 그것은 아주 청초한 해결책이다. – Sekhar