【问题标题】:C# XML serialization preserve list<T> orderC# XML 序列化保留列表<T> 顺序
【发布时间】:2013-12-12 01:23:19
【问题描述】:

目前我正在使用列表制作一种历史记录。我通过简单地使用 XML 序列化程序对其进行序列化来保存此列表,但是每当我序列化列表然后反序列化它时,顺序与我第一次创建列表时的顺序不同。

比如我第一次创建列表的时候,可能是这个顺序

  1. 一个
  2. B
  3. C

然而,当我序列化/反序列化时,它可能会变成类似

  1. B
  2. C
  3. 一个

有没有办法或强制序列化程序在序列化时保留列表的顺序? (我发现它实际上以错误的顺序保存它)

当前代码:

public static List<StoredData> clipboardData = new List<StoredData>();

private void SaveClipboard()
{
    XmlSerializer serializer = new XmlSerializer(typeof(List<StoredData>));

    using (StreamWriter stream = new StreamWriter(historyFile))
    {
        serializer.Serialize(stream, clipboardData);
    }

    Console.WriteLine("Saved");
}

StoredData 类

[Serializable]
public class StoredData
{
    public String storedClip;
    public DateTime storedTime;
}

【问题讨论】:

  • 您使用的是哪个序列化程序?
  • @Baldrick XML 序列化程序
  • 我几乎可以肯定 XmlSerializer 保留了列表的顺序。您可以发布这种行为的列表的代码和声明吗?
  • @Baldrick 我也有同样的想法,但无论出于何种原因,它似乎都没有这样做。用代码更新帖子,看看是否有帮助。
  • @user1363526:IIRC,它仍然不应该倒车。我不知道你要不要删除这个问题,但是从我现在坐的位置,你应该必须打电话给Reverse

标签: c# xml serialization


【解决方案1】:

这是一种在序列化 XML 时保留顺序的方法

[Serializable]
public class StoredData
{
    [Datamember(Name = "Clip", Order = 1)]
    public String storedClip;
    [Datamember(Name = "Time", Order = 2)]
    public DateTime storedTime;
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2019-09-13
  • 2012-04-28
  • 1970-01-01
  • 2012-01-08
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多