gpt4 book ai didi

C#,为什么 XmlSerializer 序列化基础对象而不是接口(interface)?

转载 作者:太空宇宙 更新时间:2023-11-03 22:13:52 26 4
gpt4 key购买 nike

为什么在序列化ICarXmlSerializer会序列化所有的Car? ..而不仅仅是从 ICar 序列化 A

我觉得这很奇怪,因为当我在调试器中看到它时,icars 只包含 A,但是 test.xml ABC

示例代码:

//IMPLEMENTATION
Cars cars = new Cars();

ICars icars = cars;

var iXmls = new XmlSerializer(typeof(Cars));
using (TextWriter iTw = new StreamWriter("test.xml"))
{
iXmls.Serialize(iTw, icar);
}

//CLASS
[XmlRootAttribute("Cars")]
public class Cars : ICar
{
private string _A = "Car A";
private string _B = "Car B";
private string _C = "Car C";

public string A { /* get.. set.. */}
public string B { /* get.. set.. */}
public string C { /* get.. set.. */}
}

//INTERFACE
public interface ICars
{
string A;
}

XML 结果:

<Cars>
<A>Car A</A>
<B>Car B</B>
<C>Car C</C>
<Cars>

期待得到这个(但没有):

<Cars>
<A>Car A</A>
<Cars>

最佳答案

因为您创建了 XmlSerializer 并将 typeof(Cars) 传递给它的构造函数。 XmlSerializer 不适用于接口(interface)类型。

如果你想忽略一些字段,你可以使用System.Xml.Serialization.XmlIgnoreAttribute在你的课上。参见 this post .

关于C#,为什么 XmlSerializer 序列化基础对象而不是接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5698045/

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