2017-12-05 3 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; 
関連する問題