gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 19:30:17 25 4
gpt4 key购买 nike

我有这个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com