【问题标题】:Howto serialize a List<T> in Silverlight?如何在 Silverlight 中序列化 List<T>?
【发布时间】:2011-02-10 09:06:17
【问题描述】:

我有一个名为坐标的结构,它包含在另一个名为段的类的列表中。

public struct Coordinate
{
    public double Latitude { get; set; }
    public double Longtitude { get; set; }
    public double Altitude { get; set; }
    public DateTime Time { get; set; }
}

public class Segment
{
    private List<Coordinate> coordinates;
    ...
}

我想使用 Silverlight(在 Windows Phone 7 上)使用 XmlSerializer 序列化 Segment 类。我从link text 了解到 XmlSerializer 不支持List&lt;T&gt;。序列化可调整大小的数组坐标的建议方法是什么?

谢谢,尤尔根

【问题讨论】:

    标签: c# silverlight serialization xml-serialization


    【解决方案1】:

    我认为应该始终设计自己的序列化格式。这些天来,这似乎是少数人的意见。

    您永远不知道什么序列化程序会变成一种文件格式,并且您真的不希望能够读取依赖于 .NET 框架的文件格式。

    【讨论】:

    • 我同意你不想依赖于框架(所以避免像 BinaryFormatter 这样的东西,如果它存在于这个平台上),但是有很多独立于平台的预滚动序列化 API不涉及重新发明轮子。
    【解决方案2】:

    你试过了吗?哪一点特别暗示没有列表?

    有关信息,一旦我将所有工具(VS2010 / Phone 7 sdk 等)放在一起,我计划看看 protobuf-net 可以为 Phone 7 做什么,但XmlSerializer 应该是一个可靠的默认设置。

    【讨论】:

    • “ArrayList 和通用列表的序列化 XmlSerializer 无法序列化或反序列化以下内容:* ArrayList * Arrays of List)>)”页面过半
    • @Jurgen - 表示不支持嵌套/锯齿状列表。您的问题与嵌套列表无关。甚至可以通过在中间添加一个额外的对象来解决这个问题(即你有一个对象数组,它封装一个东西的列表;这很好)。对于信息,这是一个常见的限制; protobuf-net 坚持这一点(除了一些例外情况)
    • 嗯,是的,我错过了这个。我想知道为什么序列化在 Win7 Phone 模拟器上不起作用。将对此进行调查。
    • @Jurgen - 查看内部异常; XmlSerializer 通常对问题很健谈。例如,您是否初始化了coordinates
    • 不知道这是否相关,但当我调用反序列化时,我注意到输出窗口中有一大堆 System.FormatException 消息。我重新安装了 Win7 手机工具,现在序列化工作正常。谢谢指点!
    【解决方案3】:

    我总是更喜欢 DataContractSerializer 而不是 XmlSerializer。 XmlSerializer 在 vanilla Silverlight 中不可用,但 DataContractSerializer 可用。

    序列化您展示的结构不会有任何问题。

    【讨论】:

      猜你喜欢
      • 2011-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      • 2015-10-25
      • 2021-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多