2013-05-15 2 views
-2

C#에서 xml serialization/deserialization 동작을 이해하려고합니다. 나는 다음 예제 코드를 함께 일하고 :한 클래스의 개체 직렬화 및 다른 클래스의 속성 설정

[Serializable] 
public class Class1 { 
    Class2 c2 = new Class2(); 

    public List<double> Arr2 { 
     get { return c2.Arr1 ;} 
     set { c2.Arr1 = value ;} 
    } 
    [XmlIgnore] 
    public Class2 C2 { 
     get { return c2; } 
     set { c2 = value; } 
    } 

    public Class1() { 
    } 
} 

public class Class2 { 
    private List<double> arr1; 

    public List<double> Arr1 { 
     get { return arr1; } 
     set { arr1 = value; } 
    } 

    public Class2() { 
     arr1 = (new double[ 5 ]).ToList();  
     } 
} 

때마다 내가 Class1에 대한 XML 파일을 역 직렬화 할 때, 나는 XML 파일의 값 대신 Arr2에 0을 얻는다. 나는 직렬화에 대한 다음과 같은 라인을 사용하고 있습니다 :

public Class1 c1 = new Class1() ; 
XElement rootnode = XElement.Load(path); 
c1 = rootnode.XmlDeserialize<Class1>("Class1"); 

XML 파일 :

<Class1> 
<Arr2> 
    <double>1</double> 
    <double>2</double> 
    <double>3</double> 
    <double>4</double> 
    <double>5</double> 
</Arr2> 
</Class1> 
+0

경우'XElement.XmlDeserialize ("클래스 1")입니다'에서 오는? 어디서나 문서를 찾을 수 없습니다. 나는 당신의 프로젝트에서 정의 된 확장 메소드라고 가정 할 수있다. 당신은 그것을 포함해야합니다 –

+0

어떤 사람이 투표를 누른 다음 내 실수의 표시에 대한 의견을 남겨주세요. 그것은 나의 겸손한 요구입니다. Thanks – User1551892

답변

1

당신은 class2[Serializable] 속성을 추가해야합니다.

좋아요, 댓글에서 나는 내가 틀렸다는 것을 알 수 있습니다.

이 나를 위해 일한 :

XElement rootnode = XElement.Load(path); 
var serializer = new System.Xml.Serialization.XmlSerializer(typeof(Class1)); 
var c1 = (Class1)serializer.Deserialize(rootnode.CreateReader()); 
+0

'Serializable' 속성은'BinaryFormatter'에 의해서만 사용됩니다. XMLSerializer는 그것에 대해 신경 쓰지 않습니다. –

+0

나는 고쳐졌다. 이것은 예제 코드에서'Class1'의'Serializable' 속성이 불필요하다는 것을 의미합니까? –

+0

네, 맞습니다. –

관련 문제