2017-11-22 2 views
0

여기 내 수업이 있습니다. 내가 널 int 값으로 직렬화 할 때XML 직렬화 - null 값 요소 제거

public class Class1 
{ 
    private int? intValue; 
    public int? IntValue 
    { 
     get { return intValue; } 
     set { intValue = value; } 
    } 

    bool ShouldSerializeIntValue() 
    { 
     return IntValue != null; 
    } 

    private string stringValue; 
    public string StringValue 
    { 
     get { return stringValue; } 
     set { stringValue = value; } 
    } 

    bool ShouldSerializeStringValue() 
    { 
     return StringValue != null; 
    } 

    private decimal? decimalValue; 
    public decimal? DecimalValue 
    { 
     get { return decimalValue; } 
     set { decimalValue = value; } 
    } 

    bool ShouldSerializeDecimalValue() 
    { 
     return DecimalValue != null; 
    } 

} 

}

여기, 내 XML 직렬화 코드

 private string ToXml(object model) 
    { 
     if (model != null) 
     { 
      XmlSerializer Serializer = new XmlSerializer(model.GetType()); 
      XmlSerializerNamespaces NameSpaces = new XmlSerializerNamespaces(); 
      NameSpaces.Add("", ""); 
      StringWriter Writer = new StringWriter(); 
      XmlWriterSettings Settings = new XmlWriterSettings(); 
      using (XmlWriter XmlWriter = XmlWriter.Create(Writer)) 
      { 
       Serializer.Serialize(XmlWriter, model, NameSpaces); 
      } 
      return Writer.ToString(); 
     } 
     else return null; 

    } 

입니다 그것은 다음과 같이 직렬화된다. 그래서 그 대신 내가이 null 인 경우 직렬화하는 동안 전체 요소를 제거하려면이

<IntValue p2:nil="true" xmlns:p2="http://www.w3.org/2001/XMLSchema-instance" /> 

같은 직렬화의

<?xml version="1.0" encoding="utf-16"?><Class1><IntValue p2:nil="true" xmlns:p2="http://www.w3.org/2001/XMLSchema-instance" /><StringValue>Int value is null.</StringValue><DecimalValue>456.789</DecimalValue></Class1> 

.

비슷한 질문이 있지만 위의 그림과 같이 항상 직렬화되어 있고 "ShouldSerialize"기능을 가지고 있기 때문에이 특정 클래스에서 잘못된 것이 무엇인지 확신 할 수 없습니다.

어떻게해야합니까? 이견있는 사람 ?

답변

0

당신은 공공

public bool ShouldSerializeIntValue() 
{ 
    return IntValue != null; 
} 
+0

바보 나 : 좋은 캐치로 ShouldSerialize {PROPERTYNAME} 방법을 표시해야합니다. 고맙습니다. – Adam