c#在同一个XML文件中序列化多个列表

本文关键字:序列化 列表 文件 同一个 XML | 更新日期: 2023-09-27 18:02:32

我正在尝试将3个列表序列化为唯一的xml文件。我的项目是一个UWP,我写了一个方法,但它目前只序列化1个列表。我如何用我的方法序列化3个列表。

我当前的序列化方法:

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,
            });

我想要得到类似的东西:

<?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>

c#在同一个XML文件中序列化多个列表

你应该有一个这样的类;

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

并序列化myCompoundClass实例