C#中哪些通用集合支持IXmlSerializable接口?

3
有没有哪个.NET泛型集合标记为IXmlSerializable?我已经尝试了List<T>和Collection<T>,但是两者都不能直接使用。
在我自己创建collection<T>、list<T>或dictionary<T>类之前,我想先检查一下Microsoft是否已经包含了此功能。这似乎是基本功能。
编辑:我的意思是创建一个继承自泛型集合类并实现IXmlSerializable的类。以下是一个示例:http://www.codeproject.com/KB/XML/IXmlSerializable.aspx。另一个示例在这里:http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx
我正在使用DataContractSerializer,在一个方法中使用它,该方法的签名如下:
public static Stream GetXmlStream(IXmlSerializable item)

问题在于虽然.NET框架中有许多可序列化的类,但并不是所有类都明确实现了IXmlSerializable接口。
4个回答

5

没有要求实现IXmlSerializable接口才能够进行xml序列化。

public class Foo 
{
    public List<string> Names { get; set; }
}

XML序列化会很好地生成类似以下内容的结果:
<?xml version="1.0" encoding="utf-16"?>
<Foo 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Names>
    <string>a</string>
    <string>b</string>
    <string>c</string>
  </Names>
</Foo>

然而

public class Foo<T> 
{
    public List<T> Names {  get; set; }
}

将会产生
<?xml version="1.0" encoding="utf-16"?>
<FooOfString 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Names>
    <string>a</string>
    <string>b</string>
    <string>c</string>
  </Names>
</FooOfString>

4

您所提供的文章展示了如何使用泛型来执行序列化。我希望有一个可以被序列化的通用集合。 - dthrasher

2

关于你的问题,如果你想序列化/反序列化一个IDictionary,请参考这篇有用的文章。但是,我建议使用这里展示的模式来编写读取和写入方法,因为它们能更好地处理不同情况。


那是一个很棒的链接。我最终做了类似的事情。+1 - dthrasher
还可以看一下我添加的第二个链接。我在第一个链接中遇到了一些问题,特别是如果集合为空的情况... - Rory

1

在自己进一步的研究后,我得出了同样的结论。截至 .NET 3.5 SP1,没有任何 .NET 泛型集合是 IXmlSerializable。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接