我想知道如何从XML反序列化为包含对象的类,该对象可以是ARS或BRS类中的任何一个
ARS和BRS是从XSD文件生成的 由于ARS和BRS都包含属性C,因此在新的Serializer
时失败错误: System.InvalidOperationException:'有一个错误反映了类型' TestXml.Response'。'
InvalidOperationException:类型' B.C'和' A.C'两者都使用来自命名空间''的XML类型名称' C'。使用XML属性为类型指定唯一的XML名称和/或命名空间。
我尝试将命名空间添加到ARS.C和BRS.C 但由于响应不包含命名空间,因此返回null
任何建议都会有所帮助,谢谢。
家长班"回应"
namespace TestXml
{
[XmlRoot(Namespace="")]
public class Response
{
[XmlElement(ElementName = "ARS", Type = typeof(ARS))]
[XmlElement(ElementName = "BRS", Type = typeof(BRS))]
public object Object;
}
}
ARS课程
namespace A
{
public class ARS
{
public int a;
public C c;
}
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public class C
{
public string d;
}
}
班级BRS
namespace B
{
public class BRS
{
public int b;
public C c;
}
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public class C
{
public int e;
}
}
通过XmlSerializer反序列化
string ooo = @"<Response xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema""><ARS><a>1</a><c><d>ca</d></c></ARS></Response>";
XDocument xDoc = XDocument.Parse(ooo);
XmlSerializer ser = new XmlSerializer(typeof(Response));
using (var reader = xDoc.CreateReader(System.Xml.Linq.ReaderOptions.OmitDuplicateNamespaces))
{
Response deserializedObject = (Response)ser.Deserialize(reader);
}
答案 0 :(得分:0)
我最后使用xml linq首先提取响应字符串的子部分,然后逐个反序列化,以便冲突不再存在