2012-03-01 4 views
2

가 나는 요소가 내가 INT를 시도역 직렬화 널은

private int _acute; 
     public int Acute 
     { 
      get { return _acute; } 
      set 
      {  
        _acute = value; 
        NotifyPropertyChanged("Acute"); 

      } 
     } 

XML 파일

<Status StatusId="1"> 
    <StatusName>Not inspected</StatusName> 
    <Acute></Acute> 
    </Status> 
    <Status StatusId="2"> 
    <StatusName>Acute</StatusName> 
    <Acute>1</Acute> 
    </Status> 

클래스 비어있을 수있는 클래스로 XML 파일을 직렬화하기 위해 노력하고있어 값 ? 그리고 [XmlElement(IsNullable = true)] 그러나 아무 것도 아무 오류가 발생하지 않고 빈 elemet에서 읽는 방법을 알고 작동합니다.

+0

어떤 오류가 발생하고 있습니까? _acute와 Acute를 int로 정의 할 때 어떤 오류가 났습니까? – zmbq

+0

int를 사용할 때 xml 문서에서 오류가 발생합니까? 요소는 비어 있습니다. 요소에 값을 추가하면 잘 동작합니다. – klashagelqvist

+0

그게 오류입니까? "XML 문서의 오류"? 어떤 예외가 발생합니까? 아마도 XML의 오류가 어디에 있는지 알려주는 속성이있을 것입니다. XmlSerializer는 nullable 값 형식을 명시 적으로 지정하지 않더라도 nullable 값 형식을 nullable로 처리합니다. – zmbq

답변

0

급성을 int?으로 만들어보십시오. 삽입에는 null, nullable int (ints)를 포함 할 수 없습니다.

편집 : 응답하기 전에 모든 내용을 읽으십시오.

아마도 문제는 <Acute>이 실제로 XML에 누락되어 있지 않다는 것입니다. 그러나 그 값은 어떤 값으로도 변환되지 않습니다. XML에서 <Acute></Acute> 행을 제거하고 특성을 다시 int로 변경하십시오. . 내가 추측하고있어

+0

코드 –

+0

Ah 뒤에 첫 번째 문장을 다시 읽으십시오. 좋은 지적. – zmbq

+1

및 null은 빈 요소로 저장되지 않습니다. '<급성 i : nil = 'true'/>와 같은 것이 될 것입니다. –

1

그것을 할 수있는 권리 방법이 아니다 그러나 나는 string에서 int 자신을 변환을 처리하여 과거에이 문제를 처리했습니다. 대략적으로 :

private int _acute = 0; // or assign to some more appropriate default 
[XmlIgnore] 
public int Acute 
{ 
    get { return _acute; } 
    set 
    {  
      _acute = value; 
      NotifyPropertyChanged("Acute"); 
    } 
} 
// I kept mine as public but may be able to hide it at a minimal level that 
// serialization still works. 
[XmlElement(ElementName = "Acute")] 
public string SerializedAcute 
{ 
    get { return _acute.ToString(); } 
    set 
    { 
     Int32.TryParse(value, out _acute) 
    } 
} 

만약 당신이 이런 것들을 많이 가지고 있다면 추한 일이 생길 수 있습니다.

+1

'SerializedAcute'에'[XmlElement (ElementName = "Acute")]'속성을 넣어야합니다. –

+0

좋은 캐치 . 나는 그것을 내 코드와 비교하면서 코드를 읽었지 만 내가 누락 된 코드를 알아낼 수 없었다. –