Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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# 使用XmlSerializer时出现问题_C#_Xml_Xml Parsing_Xmlserializer_Xml Deserialization - Fatal编程技术网

C# 使用XmlSerializer时出现问题

C# 使用XmlSerializer时出现问题,c#,xml,xml-parsing,xmlserializer,xml-deserialization,C#,Xml,Xml Parsing,Xmlserializer,Xml Deserialization,这是我的C#代码: publicstatict反序列化(字符串输入),其中T:class { System.Xml.Serialization.XmlSerializer ser= 新的System.Xml.Serialization.XmlSerializer(typeof(T)); 使用(StringReader sr=新StringReader(输入)) { var test=ser.Deserialize(sr);//*这是中断的行* 返回(T)序列反序列化(sr); } } 这是我的

这是我的C#代码:

publicstatict反序列化(字符串输入),其中T:class
{
System.Xml.Serialization.XmlSerializer ser=
新的System.Xml.Serialization.XmlSerializer(typeof(T));
使用(StringReader sr=新StringReader(输入))
{
var test=ser.Deserialize(sr);//*这是中断的行*
返回(T)序列反序列化(sr);
}
}
这是我的XML

<releaseinfo>
<mediapackagedirectory>C:\\Temp\\Test1\\</mediapackagedirectory>
<revision>A</revision>
<files>
    <file>C:\\Temp\\Test1\\test1.zip</file>
    <file>C:\\Temp\\Test1\\test1.zip</file>
</files>
<target>C:\\Temp\\Target\\</target>
</releaseinfo>

C:\\Temp\\Test1\\
A.
C:\\Temp\\Test1\\Test1.zip
C:\\Temp\\Test1\\Test1.zip
C:\\Temp\\Target\\
下面是我得到的错误:

Exception: {"There is an error in XML document (1, 2)."}
InnerException: {"<releaseinfo xmlns=''> was not expected."}
异常:{“XML文档(1,2)中存在错误”。}
InnerException:{“不是预期的。”}

我遇到的错误似乎与名称空间有关,即使我的xml没有名称空间。正如图所示

假设您有一些类“Releaseinfo”,请在顶部添加以下属性:

[Serializable, XmlRoot("releaseinfo")]
public partial class Releaseinfo
{
...
}
详情如下:

此外:

  • 问:你为什么反序列化两次?为什么不直接
    返回(T)序列反序列化(sr)?第一行只是“测试代码”吗

  • 只是一个旁注:请尽可能使用文本(相对于屏幕截图)


我修改了上面的帖子。“似乎与名称空间有关”-不,它在抱怨全名;全名由两部分组成:本地名(
releaseinfo
)和名称空间(可以通过
xmlns=
或别名前缀)。它只是简单地告诉您本地名称和有效名称空间,以便您能够理解上下文。问题几乎可以肯定的是,这个名字是出乎意料的。是的,我使用“var test”行只是为了测试原始行为什么会中断。我认为这与我声明对象“T”的方式有关,但显然不是。感谢您将屏幕截图替换为错误文本。2.XmlRoot属性是否解决了问题?3.如果你觉得其中任何一个答案有帮助的话,一定要“向上投票”。看来这个错误与课堂无关。“反序列化”方法似乎有些问题。“(T)ser.Deserialize(sr);“不管我对类或对象做了什么,或者即使我没有指定一个对象,只是使用“var”,正如我的测试行所指出的那样,它都会在这里中断。你绝对会得到错误
“不是预期的。”
如果你不使用
[Serializable,XmlRoot()]
注释你的类。。。或同等产品。例如,可以在.xml文件中显式声明名称空间。但是添加
[Serializable,XmlRoot()]
应该可以让您在这种特殊情况下克服这个特定问题。在这里查看更多XmlSerializer疑难解答提示:
[Serializable]
在这里不需要
XmlSerializer
根本不关心这个伪属性
[Serializable, XmlRoot("releaseinfo")]
public partial class Releaseinfo
{
...
}