C#使用List数据成员序列化一个类

时间:2011-03-30 19:09:42

标签: 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. 我想要表演!这是最好的方法吗?
  4. --------------- 更新 ----------------------- -

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

    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>
    

    ???

    它忽略了这两个列表?

3 个答案:

答案 0 :(得分:4)

1)您的list是一个字段,而不是属性,而XmlSerializer只能用于属性,请尝试以下操作:

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

2)还有其他序列选项,Binary是另一个选项,但JSON也有一个。

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

答案 1 :(得分:1)

list不是属性。将其更改为公开可见的属性,应该将其拾取。

答案 2 :(得分:1)

我认为如果我使用IList,XmlSerializer不起作用,所以我将其更改为List,这使它工作。正如Nate也提到的那样。