gpt4 book ai didi

c# - .NET XmlSerializer 和 C# 中的嵌套类

转载 作者:可可西里 更新时间:2023-11-01 08:49:51 25 4
gpt4 key购买 nike

我在 C# 中使用 XmlSerializer 时遇到了一些令人惊讶的行为。考虑以下代码。

public class A : IEnumerable
{
public class B
{
[XmlAttribute]
public string PropA { get; set; }
[XmlElement]
public string PropB { get; set; }
}

public IEnumerator GetEnumerator ()
{
yield break;
}
}

class Program
{
static void Main (string[] args)
{
XmlSerializer serializer = new XmlSerializer(typeof(A.B));

XmlTextWriter writer = new XmlTextWriter(@"E:\temp\test.xml", Encoding.Default);
serializer.Serialize(writer, new A.B() { PropA = "one", PropB = "two" });
}
}

在这个例子中,我尝试序列化嵌套类 A.B 的一个实例,它本身不以任何方式使用容器类 A。但是当我试图为它构造 XmlSerializer 时,抛出以下异常:

InvalidOperationException was unhandled:

To be XML serializable, types which inherit from IEnumerable must have an implementation of Add(System.Object) at all levels of their inheritance hierarchy. Test.A does not implement Add(System.Object).

XmlSerializer 试图在我实际尝试序列化类型 A.B 时对类型 A 应用序列化约束。然而,我的理解是,除了对外部类型实例中数据的特权访问之外,嵌套类型并不特殊,其行为就好像它在 namespace 中一样。

这种理解是否不正确,嵌套类型或 XmlSerializer 的语义是否证明了这种行为,或者这感觉像是 XmlSerializer 中的错误?

在特定于 XmlSerializer 语义方面,是否有任何记录的要求在应用于嵌套类型时对所有外部类型强制执行 XmlSerializer 约束?

最佳答案

http://msdn.microsoft.com/en-us/library/vstudio/ms229027%28v=vs.100%29.aspx

Because a nested type is treated as a member of the declaring type, the nested type has access to all other members in the declaring type.

因此,如果序列化器想要使用 A.B,它也需要 A 的定义。 IEnumerable 验证开始的地方。

B 实际上没有引用 A 中的任何内容并不重要 :)

关于c# - .NET XmlSerializer 和 C# 中的嵌套类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10441940/

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