我有这个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不显示。
--------------- 更新 ----------------------- -
所以我要序列化的实际类是:
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>
???
它忽略了这两个列表?
答案 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也提到的那样。