Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从XML字符串反序列化对象?_C#_.net_Xml_Xml Serialization_Xml Deserialization - Fatal编程技术网

C# 如何从XML字符串反序列化对象?

C# 如何从XML字符串反序列化对象?,c#,.net,xml,xml-serialization,xml-deserialization,C#,.net,Xml,Xml Serialization,Xml Deserialization,我正在尝试使用xmlSerializer.deserialize()从XML字符串反序列化对象,但返回的对象始终为空(不是null,但所有属性都为null或0)。我不知道我做错了什么,但我没有得到任何错误或例外 string xml = "***my xml is here***"; XmlSerializer ser = new XmlSerializer(typeof(Order)); StringReader stringReader = new StringReader(xml); X

我正在尝试使用xmlSerializer.deserialize()从XML字符串反序列化对象,但返回的对象始终为空(不是null,但所有属性都为null或0)。我不知道我做错了什么,但我没有得到任何错误或例外

string xml = "***my xml is here***";

XmlSerializer ser = new XmlSerializer(typeof(Order));
StringReader stringReader = new StringReader(xml);
XmlTextReader xmlReader = new XmlTextReader(stringReader);
Order order = (Order)ser.Deserialize(xmlReader);
xmlReader.Close();
stringReader.Close();
Order.cs的源是使用XSD.exe工具从XSD生成的

order.cs的来源:


示例order XML:

返回一个对象的事实告诉我该对象是公共的,并且有一个公共的无参数构造函数(否则会引发异常)。因此,它很可能会失败:

  • 反序列化成员必须是具有public
    get
    和public
    set
    的公共属性,或者是公共(非只读)字段
  • 默认情况下,成员名称必须与xml元素名称完全匹配,与父元素位于同一xml命名空间中;可以通过属性(更改名称、使用属性、名称空间等)获得更精细的控制

您得到一个对象的事实告诉我该对象是公共的,并且有一个公共的无参数构造函数(否则会引发异常)。因此,它很可能会失败:

  • 反序列化成员必须是具有public
    get
    和public
    set
    的公共属性,或者是公共(非只读)字段
  • 默认情况下,成员名称必须与xml元素名称完全匹配,与父元素位于同一xml命名空间中;可以通过属性(更改名称、使用属性、名称空间等)获得更精细的控制
示例XML文件(example order.XML)使用名称空间
http://tempuri.org/OrderSchema.xsd
但是XSD(order.cs)生成的代码定义了名称空间中的所有元素
http://x-rm.com/wrightcottrell/cataloguecd/

为了使序列化正常工作,您需要这些名称空间进行匹配。

您的示例XML文件(example order.XML)使用名称空间
http://tempuri.org/OrderSchema.xsd
但是XSD生成的代码(order.cs)定义命名空间中的所有元素
http://x-rm.com/wrightcottrell/cataloguecd/


要使序列化正常工作,您需要这些名称空间进行匹配。

我本来打算粘贴order.cs的XML和源代码,但我看不到如何在此处附加文件。您可以发布order类吗?请将代码放入您的问题中。但是你不应该包括整个源代码,只是一个有同样问题的最小代码。不要附加文件,复制/粘贴相关部分到问题中。我认为这是正确的。XML看起来像什么?属性是否有getter/setter?你是如何连续化订单的?您是否在属性上放置可序列化标记?我本来打算粘贴Order.cs的XML和源代码,但我看不到如何在此处附加文件。您可以发布您的Order类吗?请将代码放入您的问题中。但是你不应该包括整个源代码,只是一个有同样问题的最小代码。不要附加文件,复制/粘贴相关部分到问题中。我认为这是正确的。XML看起来像什么?属性是否有getter/setter?你是如何连续化订单的?您是否在属性上放置可序列化标记?我没有用于排序的构造函数-我假定值是由反序列化函数而不是构造函数填充的?@Nick yes;如果不声明一个,编译器将假定一个公共的无参数构造函数。如果没有公共的无参数构造函数,它将无法工作。我没有Order的构造函数-我假定值是由反序列化函数而不是构造函数填充的?@Nick yes,你有;如果不声明一个,编译器将假定一个公共的无参数构造函数。如果没有公共的无参数构造函数,它将无法工作。