gpt4 book ai didi

c# - 控制派生类型的序列化

转载 作者:数据小太阳 更新时间:2023-10-29 01:51:31 25 4
gpt4 key购买 nike

给定一个类型,例如:

public class FooList : List<Foo>
{
public string SomeMessage { get; set; }
}

如何在不重写序列化本身的情况下让 SomeMessage 属性与集合一起序列化?

我得到的是:

<FooList>
<Foo />
<Foo />
<Foo />
</FooList>

我想要的是:

<FooList>
<SomeMessage />
<Foo />
<Foo />
<Foo />
</FooList>

无论出于何种原因,(我认为这是因为用于通用列表的序列化没有看到新属性)它没有被写出。

以防万一,这是我用来序列化它的方法。

FooList content = new FooList();
content.SomeMessage="this is a test";
//add foos

using (TextWriter writer = new StreamWriter("C:\\foos.xml"))
{
XmlSerializer serializer = new XmlSerializer(typeof(FooList));
serializer.Serialize(writer, content);
}

最佳答案

XmlSerializer 序列化一个集合时,它只考虑集合中的项目。类中声明的任何额外属性都将被忽略。您要么必须实现 IXmlSerializable 以提供您自己的序列化逻辑,要么更改您的类的设计。

你可以这样做:

[XmlRoot("FooList")]
public class FooListContainer
{
public string SomeMessage { get; set; }

[XmlElement("Foo")]
public List<Foo> Foos { get; set; }
}

关于c# - 控制派生类型的序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3807664/

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