我读过很多关于已知类型的文章,我相信我的例子应该可以工作。但事实并非如此。我在反序列化时遇到了下面的异常,我不明白为什么:
第1行位置% 2出错。应为命名空间‘http://schemas.datacontract.org/2004/07/ConsoleApplication2’中的元素'A‘。遇到名为'C‘、命名空间为'http://schemas.datacontract.org/2004/07/ConsoleApplication2’的'Element‘。
using System;
using System.Runtime.Serialization;
using System.Xml;
using System.IO;
namespace ConsoleApplication2
{
[DataContract][KnownType(typeof(C))]class A { }
[DataContract]class C : A { }
class Program
{
static void Main(string[] args)
{
A a = new C();
string data;
var serializer = new DataContractSerializer(a.GetType());
using (var sw = new StringWriter())
{
using (var xw = new XmlTextWriter(sw))
serializer.WriteObject(xw, a);
data = sw.ToString();
}
serializer = new DataContractSerializer(typeof(A));
using (var sr = new StringReader(data))
using (var xr = new XmlTextReader(sr))
a = (A)serializer.ReadObject(xr);
}
}
}我遗漏了什么?
发布于 2009-07-24 13:27:06
更改创建序列化程序的方式。使用:
var serializer = new DataContractSerializer(typeof(A));代替a.GetType();
它起作用了。生成的Xml是不同的-是这样的:
<C> ...现在是:
<A i:type="C"> ...https://stackoverflow.com/questions/1177555
复制相似问题