gpt4 book ai didi

c# - .NET XML 序列化和空集合

转载 作者:太空狗 更新时间:2023-10-29 23:19:19 25 4
gpt4 key购买 nike

我有一个包含一些集合的类,我想将此类的实例序列化为 XML,而不必将集合初始化为空,也不必实现 IXmlSerializable。我不在乎它是否创建空元素,或者根本不创建元素。只是它无需为每个基于集合的属性初始化集合即可工作。

我查看了所有可以用来修饰属性的 XML 属性,但没有取得任何成功。这似乎是一件简单的事情,可以有一个元素或根本没有。然后当它被反序列化时,它只会让它们为空或忽略它们。

这是用于解决此问题的类的简单版本。使用这个和默认值你会得到一个异常“对象引用未设置到对象的实例”,因为集合为空;

public class MyClass
{
public string Name { get; set; }
public bool IsAlive { get; set; }
public List<Car> Cars { get; set; }
public List<Home> Homes { get; set; }
public List<Pet> Pets { get; set; }

public void ToXmlFile(string fileName)
{
XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
TextWriter writer = new StreamWriter(fileName);
serializer.Serialize(writer, this);
writer.Close();
}
}

编辑感谢您的帮助,事实证明问题出在我的 GetHashCode 方法中,该方法没有正确处理 null。一旦我解决了这个问题,一切都很好。我将第一个回答的标记为正确。对不起,红鲱鱼,但与你们一起解决它确实有所帮助。

最佳答案

您无需初始化集合即可将类序列化为 XML。这里有一个简单的程序来演示:

class Program
{
static void Main(string[] args)
{
MyClass c = new MyClass() { Name = "Test", IsAlive = true };
XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
using (MemoryStream ms = new MemoryStream())
{
serializer.Serialize(ms, c);
Console.WriteLine(Encoding.UTF8.GetString(ms.ToArray()));
}
Console.ReadLine();
}
}

这将打印以下输出:

<?xml version="1.0"?>
<MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Name>Test</Name>
<IsAlive>true</IsAlive>
</MyClass>

换句话说,null 集合属性的行为方式与任何其他 null 属性相同 - 它们根本不会被序列化(除非您更改默认值,我没有)。

关于c# - .NET XML 序列化和空集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2143551/

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