我有一个需要反序列化为XmlSerializer
的对象的xml文档:
执行此操作的方法采用默认命名空间和xml字符串:
public static T Deserialize(string xml, string defaultNamespace)
{
var serializer = new XmlSerializer(typeof(T), defaultNamespace);
object obj;
using (var stringReader = new StringReader(xml))
{
obj = serializer.Deserialize(stringReader);
stringReader.Close();
}
return (T)obj;
}
当使用以下xml字符串传递默认命名空间“http://www.defaultnamespace.com/xsd/MyObject12”时:(其中新行为“\ n \ r”)
<xml version="1.0" encoding="utf-8"?>
<ns:MyObject12 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns1="http://example.com/xsd/example11"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:ns="http://www.example.com/xsd/MyObject12">
<Status xmlns="some:stuff">
<StatusCode>0</StatusCode>
</Status>
</ns:MyObject12>
抛出以下异常:
System.Xml.dll中出现“System.InvalidOperationException”类型的异常但未在用户代码中处理
附加信息:XML文档中存在错误(2,2)。
内部例外:{&lt; MyObject12 xmlns ='http://www.example.com/xsd/MyObject12'&gt;没想到。“}
我尝试通过将ns:
添加到所有xml元素来修复它,但发生了同样的错误。
有谁知道如何解决这个问题?
答案 0 :(得分:2)
以下是示例代码。它运作正常。只更改它从xml字符串中删除<xml version='1.0' encoding='utf-8'?>
。
class Program
{
static void Main(string[] args)
{
const string xml = @"<ns:MyObject12 xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:ns1='http://example.com/xsd/example11' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:ns='http://www.example.com/xsd/MyObject12'><Status xmlns='some:stuff'><StatusCode>0</StatusCode></Status></ns:MyObject12>";
var myObject12 = Deserialize<MyObject12>(xml, "http://www.example.com/xsd/MyObject12");
}
public static T Deserialize<T>(string xml, string defaultNamespace)
{
var serializer = new XmlSerializer(typeof(T), defaultNamespace);
object obj;
using (var stringReader = new StringReader(xml))
{
obj = serializer.Deserialize(stringReader);
stringReader.Close();
}
return (T)obj;
}
}
[Serializable]
public class MyObject12
{
[XmlElement]
public int StatusCode { get; set; }
}