【发布时间】:2018-12-17 11:06:08
【问题描述】:
我尝试使用 C# 将 XML 反序列化为对象,但出现了一些错误。
我的 XML 文件是:
<?xml version="1.0" encoding="UTF-8"?>
<ns0:transmission xmlns:ns0="blabla.xsd">
<ns0:DiagnosisErrorResponse>
<ns0:ID>7</ns0:ID>
<ns0:ErrorCode>9</ns0:ErrorCode>
<ns0:ErrorDescription>sometext</ns0:ErrorDescription>
<ns0:ErrorDate>11-12-2018</ns0:ErrorDate>
</ns0:DiagnosisErrorResponse>
</ns0:transmission>
我有一个这样的实体:
[XmlRoot(Namespace = "blabla.xsd", ElementName = "ns0:transmission", DataType = "string", IsNullable = true)]
public class DiagnosisErrorResponse
{
[XmlElement("ID")]
public long ID { get; set; }
[XmlElement("ErrorCode")]
public int ErrorCode { get; set; }
[XmlElement("ErrorDescription")]
public string ErrorDescription { get; set; }
[XmlElement("ErrorDate")]
public string ErrorDate { get; set; }
}
我的错误是:
<transmission xmlns='blabla.xsd'> was not expected.
我的功能是这样的:
private void ReadXmlFileByPath(string filePath)
{
string xmlText = string.Empty;
XmlDocument d = new XmlDocument();
using (XmlTextReader tr = new XmlTextReader(filePath))
{
tr.Namespaces = true;
d.Load(tr);
xmlText = d.InnerXml;
}
XmlSerializer xs = new XmlSerializer(typeof(DiagnosisErrorResponse), "");
using (TextReader reader = new StringReader(xmlText))
{
DiagnosisErrorResponse result = (DiagnosisErrorResponse)xs.Deserialize(reader);
}
}
更新:我从实体的XmlElement 属性中删除了“ns0:”前缀,但仍然出现同样的错误。
【问题讨论】:
-
命名空间前缀
ns0不在元素名称中。命名空间前缀可以不同。 -
并且XML中的命名空间(xmlns:ns0)和XmlRoot属性应该是一样的
-
@KlausGütter 那么要改变什么?
-
正如@Ben 所写:从.cs 中删除ns0,即
[XmlRoot(Namespace = "blabla.xsd", ElementName = "transmission", DataType = "string", IsNullable = true)]、[XmlElement("ID")]等 -
@KlausGütter 我做了.. 但同样的错误呢
标签: c# xml xml-parsing