2017-12-05 19 views
1
public class Pet 
    { 
     // The default value for the Animal field is "Dog". 
     [DefaultValue(0)] 
     public int testinteger { get; set; } 

     [DefaultValue (00000000 - 0000 - 0000 - 0000 - 000000000000)] 
     public Guid testbool { get; set; } 
    } 

    public class Run 
    { 
    public static void Main() 
    { 
     Run test = new Run(); 

     test.SerializeObject("OverrideDefaultValue.xml"); 
    } 

    public void SerializeObject(string filename) 
    { 
     XmlSerializer mySerializer = new XmlSerializer(typeof(Pet)); 
     TextWriter writer = new StreamWriter(filename); 
     Pet myPet = new Pet(); 
     myPet.testinteger = 10; 
     mySerializer.Serialize(writer, myPet); 
     writer.Close(); 
    } 
    } 

여기에 ID 속성을 사용하여 직렬화했습니다. 속성 기본값을 사용했습니다. 그러나 직렬화는 Id 속성에 대해 제한되지 않습니다.Guid 속성 유형에 대한 직렬화를 제한하는 방법?

+0

['[NonSerializedAttribu te]'] (https://msdn.microsoft.com/en-us/library/system.nonserializedattribute.aspx)? – Alejandro

+0

@Alejandro'XmlSerializer'는'[NonSerialized]'에 관심이 없습니다 :'testbool'은 필드가 아닙니다 (자동으로 구현 된 속성에서는 사용할 수 없습니다. 흥미롭게도 필드와 비슷한 이벤트에서 사용할 수 있습니다.) –

+0

btw; '[DefaultValue]'속성은 당신이 생각하는대로하지 않는다. '00000000 - 0000 - 0000 - 0000 - 000000000000'은'0'을 말하는 멋진 방법 일뿐입니다. –

답변

0

속성이 작동하지 않는 경우 속성을 내부 (공용 속성 만 직렬화 됨)로 표시 할 수 있습니다.

올바른 속성이 설정되어 있는지 확인하여 속성 위에 XML 속성을 설정하여 속성을 직렬화하지 않는 것이 좋습니다. [XmlIgnore] 또는 [비 시리얼 라이팅]

0

이것은 시리얼 화 프로그램에 따라 다릅니다. XmlSerializer을 사용 중이므로 [XmlIgnore]을 추가하는 것은 속성 기반 방식입니다.

그러나 당신은 또한 추가 할 수 있습니다

public bool ShouldSerializetestbool() => false; 

을 (이것은 당신이 때때로가 값을 포함 할 조건 직렬화하기위한 것입니다 패턴이 public bool ShouldSerialize{PropertyName}()입니다)

더 흥미를 예 : 다음과 같을 수 있습니다.

public bool ShouldSerializetestbool() => testbool != Guid.Empty;