2016-08-16 64 views
1

我想序列化3列表到一个独特的XML文件。 我的项目是一个UWP,我写了一个方法,但它目前仅序列化1个列表。 我怎样才能用我的方法序列化3列表。c#序列化多个1列表在同一个xml文件

我现在的序列化方法:

public static async void SaveObjectToXml<T>(T objectToSave) 
{ 
    //<-----------FilePicker------------------> 
    var savePicker = new Windows.Storage.Pickers.FileSavePicker(); 
    savePicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.DocumentsLibrary; 
    savePicker.FileTypeChoices.Add("New File", new List<string>() { ".xml" }); 
    savePicker.SuggestedFileName = "New File"; 
    StorageFile newfile = await savePicker.PickSaveFileAsync(); 
    //<-----------FilePicker------------------> 
    //<----------------Serializacion------------------> 

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

    Stream stream = await newfile.OpenStreamForWriteAsync(); 


    using (stream) 
    { 
     serializer.Serialize(stream, objectToSave); 
    } 
    //<----------------Serializacion------------------> 

} 

我的列表:

public class List1 : BindableBase 
{   
    private int _Property1; 
    public int Property1 
    { 
     get { return _Property1; } 
     set { SetProperty(ref _Property1, value); } 
    } 

    private bool _Property2; 
    public bool Property2 
    { 
     get { return _Property2; } 
     set { SetProperty(ref _Property2, value); } 
    } 

    private bool _Property3; 
    public bool Property3 
    { 
     get { return _Property3; } 
     set { SetProperty(ref _Property3, value); } 
    } 
} 




public class List2 : BindableBase 
{   

    private bool _Property1; 
    public bool Property1 
    { 
     get { return _Property1; } 
     set { SetProperty(ref _Property1, value); } 
    } 

    private bool _Property2; 
    public bool Property2 
    { 
     get { return _Property2; } 
     set { SetProperty(ref _Property2, value); } 
    } 
} 

    public class List3 : BindableBase 
{   
    private double _Property1; 
    public double Property1 
    { 
     get { return _Property1; } 
     set { SetProperty(ref _Property1, value); } 
    } 

    private double _Property2; 
    public double Property2 
    { 
     get { return _Property2; } 
     set { SetProperty(ref _Property2, value); } 
    } 

    private double _Property3; 
    public double Property3 
    { 
     get { return _Property3; } 
     set { SetProperty(ref _Property3, value); } 
    } 

    private double _Property4; 
    public double Property4 
    { 
     get { return _Property4; } 
     set { SetProperty(ref _Property4, value); } 
    } 

} 

public class Values_List1 : ObservableCollection<List1> 
    { 
    } 
    public class Values_List2 : ObservableCollection<List2> 
    { 
    } 
    public class Values_List3 : ObservableCollection<List3> 
    { 
    } 

public static class ApplicationServices 
    { 
public static Values_List1 List1 = new Values_List1(); 
public static Values_List2 List2 = new Values_List2(); 
public static Values_List3 List3 = new Values_List3(); 

static ApplicationServices() 
     { 
     } 
    } 


List1.Add(new List1() 
      { 
       Property1 = 1, 
       Property2 = true, 
       Property3 = false, 
      }); 


List2.Add(new List2() 
      {     
       Property1 = true, 
       Property2 = false, 
      }); 


List3.Add(new List3() 
      { 
       Property1 = 3.564, 
       Property2 = 0.215, 
       Property3 = 0.7252, 
       Property3 = 23.463, 
      }); 

I wanna get something similar to this:

<?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"> 
    <List1> 
    <Property1>1</Property1> 
    <Property2>true</Property2> 
    <Property3>false</Property3> 
    <ToAcero>0.1</ToAcero> 
    </List1> 
    <List2> 
    <Property1>true</Property1> 
    <Property2>true</Property2> 
    </List2> 
    <List3> 
    <Property1>3.564</Property1> 
    <Property2>0.215</Property2> 
    <Property3>0.7252</Property3> 
    <Property4>23.463</Property4> 
    </List3> 
</Root> 

任何帮助表示赞赏。

回答

1

你应该有这样的课程;

class myCompoundClass 
{ 
    public List1 List1 {get;set;} 
    public List2 List2 {get;set;} 
    public List3 List3 {get;set;} 

} 

并序列化myCompoundClass实例。

+1

对于我来说,将列表序列化为数组而不是作为具有属性的包装器对象似乎更符合逻辑。 – serhiyb

+0

谢谢,我这样做,但我的方法返回错误:“myCompoundClass是一种类型,在给定的上下文中无效。” – Julius

+0

@Julius您可以在使用此解决方案的位置发布代码吗? –