0

我在 WebForms 中,我尝试将对象序列化为 XML 代码。好吧,使用:

using (FileStream writer = new FileStream("c:/temp/file.xml", FileMode.Create, FileAccess.Write))
{
    DataContractSerializer ser = new DataContractSerializer(videoContainer.GetType());
    ser.WriteObject(writer, videoContainer);
}

我收到此错误:预计不会输入数据合同名称为“YouTubeEntry: http://schemas.datacontract.org/2004/07/Google.GData.YouTube ”的“Google.GData.YouTube.YouTubeEntry” 。将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。

所以我尝试了这个:

IEnumerable<string> lista = new List<string>();
lista.ToList().Add("YouTubeEntry:http://schemas.datacontract.org/2004/07/Google.GData.YouTube");

using (FileStream writer = new FileStream("c:/temp/file.xml", FileMode.Create, FileAccess.Write))
{
    DataContractSerializer ser = new DataContractSerializer(videoContainer.GetType(), lista);
    ser.WriteObject(writer, videoContainer);
}

传递 KnownTypeAttribute 列表,但似乎无法获取列表?:O 不知道该怎么办...

4

2 回答 2

2

您必须提供类型列表而不是字符串列表

var lista = new List<Type>();
lista.Add(typeof(Google.GData.YouTube.YouTubeEntry));

using (FileStream writer = new FileStream("c:/temp/file.xml", FileMode.Create, FileAccess.Write))
{
    DataContractSerializer ser = new DataContractSerializer(videoContainer.GetType(), lista);
    ser.WriteObject(writer, videoContainer);
}
于 2013-03-11T12:01:43.583 回答
1

您应该将 Type 对象的集合传递给构造函数。不是字符串。

DataContractSerializer ser = new DataContractSerializer(videoContainer.GetType(), new List<Type> {typeof(YouTubeEntry)});
于 2013-03-11T12:02:58.110 回答