C#中的通用集合是IXmlSerializable?

时间:2009-01-24 19:24:39

标签: c# generics serialization collections

是否有任何.NET泛型集合标记为IXmlSerializable?我已经尝试了List< T>和集合< T>但是没有开箱即用。

在我推出自己的收藏品< T>之前,列出< T>或字典< T>上课时,我想我会检查微软是否已经包含了这样做的东西。这似乎是基本的功能。

编辑:通过“滚动我自己”,我的意思是创建一个继承自泛型集合类的类,并实现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 个答案:

答案 0 :(得分: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>

答案 1 :(得分:4)

据我所知,没有。不过,您可以查看附加的链接。我想你会发现它很有用。

Serialize and deserialize objects as Xml using generic types in C# 2.0

答案 2 :(得分:2)

与您的问题相关,如果您想序列化/反序列化IDictionary,请参阅this useful post。我会将here显示的模式用于您的读写方法,因为它们可以更好地处理不同的情况。

答案 3 :(得分:1)

经过我自己的进一步研究后,我得出了同样的结论。从.NET 3.5 SP1开始,.NET泛型集合都不是IXmlSerializable。