是否有任何.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接口。
答案 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。