C# 序列化一个带有 List 数据成员的类

标签 c# serialization xml-serialization

我有这个 C# 类:

public class Test
{
    public Test() { }

    public IList<int> list = new List<int>();
}

然后我有这段代码:

        Test t = new Test();
        t.list.Add(1);
        t.list.Add(2);

        IsolatedStorageFile storage = IsolatedStorageFile.GetUserStoreForApplication();
        StringWriter sw = new StringWriter();
        XmlSerializer xml = new XmlSerializer(t.GetType());
        xml.Serialize(sw, t);

当我查看 sw 的输出时,它是这样的:

<?xml version="1.0" encoding="utf-16"?>
<Test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />

我添加到列表成员变量中的值 1,2 没有显示。

  1. 那么我该如何解决这个问题呢?我将列表设为属性,但它似乎仍然不起作用。
  2. 我这里使用的是xml序列化,还有其他的序列化器吗?
  3. 我想要表现!这是最好的方法吗?

---------------- 更新如下 ---------------------- --

所以我想要序列化的实际类是这样的:

public class RoutingResult
    {
        public float lengthInMeters { get; set; }
        public float durationInSeconds { get; set; }

        public string Name { get; set; }

        public double travelTime
        {
            get
            {
                TimeSpan timeSpan = TimeSpan.FromSeconds(durationInSeconds);
                return timeSpan.TotalMinutes;
            }
        }

        public float totalWalkingDistance
        {
            get
            {
                float totalWalkingLengthInMeters = 0;
                foreach (RoutingLeg leg in Legs)
                {
                    if (leg.type == RoutingLeg.TransportType.Walk)
                    {
                        totalWalkingLengthInMeters += leg.lengthInMeters;
                    }
                }

                return (float)(totalWalkingLengthInMeters / 1000);
            }
        }

        public IList<RoutingLeg> Legs { get; set; } // this is a property! isnit it?
        public IList<int> test{get;set;} // test ...

        public RoutingResult()
        {
            Legs = new List<RoutingLeg>();
            test = new List<int>(); //test
            test.Add(1);
            test.Add(2);
            Name = new Random().Next().ToString(); // for test
        }
    }

但序列化程序生成的 XML 是这样的:

<RoutingResult>
  <lengthInMeters>9800.118</lengthInMeters>
  <durationInSeconds>1440</durationInSeconds>
  <Name>630104750</Name>
</RoutingResult>

???

它忽略了这两个列表?

最佳答案

1) 您的 list 是一个字段,而不是一个属性,并且 XmlSerializer 仅适用于属性,试试这个:

public class Test
{    
    public Test() { IntList = new List<int>() }    
    public IList<int> IntList { get; set; }
}

2) 还有其他序列化选项,Binary另一个主要的,尽管有一个用于JSON

3) 二进制可能是最高效的方式,因为它通常是直接内存转储,并且输出文件将是最小的。

关于C# 序列化一个带有 List 数据成员的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5491009/

相关文章:

c# - Xml序列化-直接渲染Root下的对象列表-Xml-Element

c# - TCP 重置后随机 "An existing connection was forcibly closed by the remote host."

c# - 以异步方式调用同步方法?

c# - 在泛型类实例化上创建了多少个实例?

scala - 如何使用 Kryo 反序列化不可变集合?

javascript - 如何序列化和恢复vuex存储状态?

java - Jackson 根据字段值添加包装器

c# - 页面加载时在 WebBrowser 中显示滚动条

Java 序列化内存效率

java - 没有 XML 声明的 XStream(new StaxDriver())