2014-10-06 2 views
1

XmlSerializer에 문제가 있습니다. 이 클래스에서XmlSerializer가 빈 요소의 특성을 deserialize합니다.

<MyClass Id="12"> 
    <ProblemHere Value="8"/> 
    <OtherElement>0</OtherElement> 
    <fdp>NTM</fdp> 
</MyClass> 

: :이 파일을 역 직렬화 할 당신이 이해다시피

[XmlType(TypeName = "MyClass")] 
public class MyClass 
{ 
    [XmlAttribute(AttributeName = "Id")] 
    public int Id { get; set; } 

    //Here I try somes head but it's a failure 
    public int ProblemHere { get; set; } 

    public int OtherElement{ get; set; } 

    public string fdp{get; set} 
} 

는, 내가 원하는 값 (여기서는 8)에 ProblemHere를 설정하는 것입니다. 그 일을하는 간단한 방법이 있습니까, 아니면 클래스를 int Value 속성으로 생성해야합니까 (과장된 것 같습니다).

+0

다른 옵션은 직렬화를 수동으로 수행하는 것입니다. – juharr

답변

1

내가 아는 한 별도의 클래스를 만들어야합니다. 이 속성의 이름은 "ProblemHere"이지만 속성의 이름을 "value"로 지정하려고합니다.이 작업을 수행 할 수있는 .Net의 모든 특성을 알지 못합니다.

보통 저는 Visual Studio에서 기본 XSD (나중에 수정할 수 있음)를 생성 한 다음 xsd.exe를 사용하여 일련의 (일련의) 직렬화 클래스를 생성하는 것을 선호합니다.

0

당신은하지 꽤이

private int _problem = 0; 
public int ProblemHere { get {return _problem; } set { _problem = value; } } 

그런 짓을하지만 즉,

+1

그게 아무것도 유용하지 않습니다; 자동으로 구현 된 속성을 수동으로 구현 된 속성으로 바꿉니다. 'XmlSerializer'는 똑같이 취급 할 것입니다. –

1

예, 당신은 데이터의 aspec을 나타내는 클래스를 만들 필요가

public class Foo { 
    [XmlAttribute] 
    public int Value {get;set;} 
} 

public Foo ProblemHere { get; set; } 

작동 수 XmlSerializer이 원하는 구조로 작동하는 유일한 방법입니다.

관련 문제