2017-12-04 22 views
0

Creators Update SDKを使用してUWPアプリケーションを開発しています。 ObservableCollectionクラスのプロパティを無視してシリアル化しようとしています。c#ObservableCollectionをシリアル化してプロパティを無視する

ここに私のコードがあります。私のクラスとシリアル化するメソッドがあります。私は[DataContract][IgnoreDataMember]を使用していますが、動作していないことがわかります。 NewSerialization.Serializer();を使用して

public class Classes 
    { 
     [DataContract] 
     public class Car : BindableBase 
     { 
      [DataMember] 
      private string _Name; 
      public string Name 
      { 
       get { return _Name; } 
       set { Set(ref _Name, value); } 
      } 

      [DataMember] 
      private string _Brand; 
      public string Brand 
      { 
       get { return _Brand; } 
       set { Set(ref _Brand, value); } 
      } 

      [IgnoreDataMember] 
      private bool _Electric; 
      public bool Electric 
      { 
       get { return _Electric; } 
       set { Set(ref _Electric, value); } 
      } 

      [DataMember] 
      private double _Price; 
      public double Price 
      { 
       get { return _Price; } 
       set { Set(ref _Price, value); } 
      } 
     } 

     public class Values_Car : ObservableCollection<Car> { } 

     public static class Garage 
     { 
      public static Values_Car Cars = new Values_Car(); 

      static Garage() 
      { 
      } 
     } 

     [XmlRoot("Root")] 
     public class GarageDTO 
     { 
      [XmlElement] 
      public Values_Car Cars { get { return Garage.Cars; } } 
     } 
    } 

    public class NewSerialization 
    { 
     private static void FillList() 
     { 
      Car e_1 = new Car() 
      { 
       Name = "element_Name", 
       Brand = "element_Brand", 
       Electric = true, 
       Price = 1, 
      }; 
      Car e_2 = new Car() 
      { 
       Name = "element_Name", 
       Brand = "element_Brand", 
       Electric = true, 
       Price = 2, 
      }; 

      Garage.Cars.Add(e_1); 
      Garage.Cars.Add(e_2); 
     } 

     public static string Serializer() 
     { 
      FillList(); 

      var _Instance = new GarageDTO(); 

      var serializer = new XmlSerializer(typeof(GarageDTO)); 

      using (var stream_original = new MemoryStream()) 
      { 
       serializer.Serialize(stream_original, _Instance); 

       string string_original = string.Empty; 

       stream_original.Position = 0; 

       using (StreamReader reader = new StreamReader(stream_original, Encoding.Unicode)) 
       { 
        string_original = reader.ReadToEnd(); 
       } 

       return string_original; 
      } 
     } 
    } 

私が得た: をしかし、XMLで、私は無視されElectric財産を得ました。

<?xml version="1.0" encoding="utf-8"?> 
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Cars> 
    <Name>element_Name</Name> 
    <Brand>element_Brand</Brand> 
    <Electric>true</Electric> 
    <Price>1</Price> 
    </Cars> 
    <Cars> 
    <Name>element_Name</Name> 
    <Brand>element_Brand</Brand> 
    <Electric>true</Electric> 
    <Price>2</Price> 
    </Cars> 
</Root> 

私はシリアライズの私ObservableCollectionのプロパティを無視することができますどのように?

あなたのお手伝いをお待ちしております。

+1

読む[属性-それを制御-XMLシリアライゼーション] (https://docs.microsoft.com/en-us/dotnet/standard/serialization/attributes-that-c​​ontrol-xml-serialization) –

+1

あなたは 'XmlSerializer'を使っていますが、' [DataContract] '、' [DataMember] 'と '[IgnoreDataMember]'は['DataContractSerializer'](https://msdn.microsoft.com/en-us/library/system.runtime.serialization.datacontractserializer.aspx)です。関連する属性については、[XMLシリアル化を制御する属性](https://docs.microsoft.com/en-us/dotnet/standard/serialization/attributes-that-c​​ontrol-xml-serialization)を参照してください。必要なのは['[XmlIgnore]'](https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlignoreattribute(v = vs.110).aspx)です。 – dbc

答えて

0

私は正確に私が見つけた見つけ@dbcと@Aluanハダッドのコメントのおかげで、これはそれを達成するために私のクラスでなければなりません:

public class Car : BindableBase 
     { 
      private string _Name; 
      public string Name 
      { 
       get { return _Name; } 
       set { Set(ref _Name, value); } 
      } 

      private string _Brand; 
      public string Brand 
      { 
       get { return _Brand; } 
       set { Set(ref _Brand, value); } 
      } 

      private bool _Electric; 
      [XmlIgnore] //<----This!   
      public bool Electric 
      { 
       get { return _Electric; } 
       set { Set(ref _Electric, value); } 
      } 

      private double _Price; 
      public double Price 
      { 
       get { return _Price; } 
       set { Set(ref _Price, value); } 
      }    
     } 
関連する問題