我在一个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);
}我得到了一个错误:键入'Google.GData.YouTube.YouTubeEntry‘,其数据契约名'YouTubeEntry:http://schemas.datacontract.org/2004/07/Google.GData.YouTube’是不需要的。向已知类型列表中添加任何静态不知道的类型--例如,使用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不确定我应该做什么.
发布于 2013-03-11 12:01:43
您必须提供类型列表,而不是字符串列表。
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-11 12:02:58
应该将Type对象的集合传递给构造函数。不是弦乐。
DataContractSerializer ser = new DataContractSerializer(videoContainer.GetType(), new List<Type> {typeof(YouTubeEntry)});https://stackoverflow.com/questions/15337982
复制相似问题