2017-11-27 13 views
0

주제가 반복적 인 것으로 알고 있습니다. 이것은 XmlSerializer에서 일하고있는 처음이 아니며이 문제가 없었습니다. 그러나이 시간 동안 나는 무슨 일이 일어나는지 전혀 모른다.지정된 패턴이 호출되었지만 효과가 없음 - 작동하지 않음 (XmlSerializer)

public string comp_addr01 
{ 
    get 
    { 
     return this.comp_addr01Field; 
    } 
    set 
    { 
     this.comp_addr01Field = value; 
    } 
} 

[XmlIgnore] 
public bool comp_addr01Specified { get { return true; } } 

테스트 한 결과 comp_add01Specified가 호출되었지만 xml 출력에는 표시되지 않았습니다.

[XmlElement(IsNullable = true)] 
public string comp_addr01 
{ 
    get 
    { 
     return this.comp_addr01Field; 
    } 
    set 
    { 
     this.comp_addr01Field = value; 
    } 
} 

XmlElement(IsNullable = true)을 추가하지만 때까지 일을하는 유일한 방법은 지금 <comp_addr01 xsi:nil="true" />XSI : 전무 = "사실은"아직 표시됩니다 나는 그것이를 표시 할 필요가 없습니다. 이 모든 일들이 무엇이 일어나고 있는지 모르겠다.

+0

실제로 문제가 무엇인지 분명하지 않습니다. comp_add01Specified는 XmlIgnore를 가지고 있기 때문에 xml에 포함되어서는 안됩니다. comp_addr01이 xml에 포함되지 않았습니까? IsNullable이 null 인 경우 항목이 작동하는 방식이므로 IsNullable 없이는 포함되지 않습니다. 널이 아닌 경우 포함됩니다. –

+0

@TimRutter, 답장을 보내 주셔서 감사합니다. 요점은 comp_addr01이 값이 null인지 여부에 관계없이 항상 XML 파일에 표시되도록하려는 것입니다. 따라서 comp_addr01Sepcified를 사용하여 XmlSerializer에이 속성을 포함시켜야한다는 것을 알았습니다. comp_addr01Specified가 호출되었지만 comp_addr01이 null이 아닌 경우 표시되지 않습니다. 'XmlElement (IsNullable = true) '속성을 추가 한 후 comp_addr01이 나타나기 시작했습니다. 오해하지 않으면 이전에 같은 개념을 적용하고 XmlElement 특성없이 작업했습니다. 이것이 제가 질문을 올린 이유입니다. 어쩌면 나는 밖으로 sth를 놓친. –

답변

0

IsNullable이 false (또는 생략) 인 경우 comp_addr01에 null 값을 지정하면 해당 속성의 xml에 요소가 추가되지 않습니다. 이 직렬 태그가 비어있는 태그를 쓰는 것을 기대할 수는 없다. 왜냐하면 비어있는 태그가 null이 될지 어떨지를 나중에 비 직렬화 할 때를 알 수있는 방법이 없기 때문이다. 단지 비어있는 객체의 인스턴스가 될 수있다. 하위 속성이 정의되었습니다.

IsNullable이 true 인 경우 속성이 null 인 경우 serializer에 xsi : nil = "true"를 사용하여 요소를 만들 것을 알리는 것입니다. xsi : nil 비트는 deserializer에이 요소가 실제로 null임을 알립니다.

XmlElementAttribute.IsNullable

는 "가져 XmlSerializer를가 XSI와 빈 태그로서 null로 설정된 부재 직렬화되어야하는지 여부를 나타내는 값을 설정한다 :. 전무 특성이 참으로 세트"