dataconctractrializerializer، المعروفة البدنية والميراث
-
19-09-2019 - |
سؤال
لقد قرأت العديد من المقالات حول الأنواع المعروفة وأدق مثالي يجب أن تعمل. لكنها لا. أحصل على الاستثناء التالي عن التحيز ولا أفهم لماذا:
خطأ في وضع الخط 1 2. توقع عنصر "A" من مساحة الاسم "http://schemas.dataconactract.org/2004/07/consoleapplication2.".. واجهت" عنصر "مع الاسم" C "، واسم الأساس"http://schemas.dataconactract.org/2004/07/consoleapplication2.'.
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);
}
}
}
ماذا ينقصني؟
المحلول
تغيير الطريقة التي تنشئها تسلسل. يستخدم:
var serializer = new DataContractSerializer(typeof(A));
بدلا من a.gettype ()؛
إنها تعمل. كان XML الذي تم إنشاؤه مختلف - كان شيئا مثل هذا:
<C> ...
والآن هو:
<A i:type="C"> ...
لا تنتمي إلى StackOverflow