【发布时间】:2021-05-15 16:42:53
【问题描述】:
我正在尝试获取一个 XML 字符串并将其反序列化并将其绑定到我的 Model 类。但是我收到了这个错误:
System.InvalidOperationException :
<requisitions xmlns=''>不是预期的
这是我调用反序列化的 C#:
var deserializer = new XmlSerializer(typeof(JobsModel),new XmlRootAttribute("requisition"));
var jobs = new JobsModel();
using (var reader = new StringReader(xmlStr))
{
jobs = (JobsModel)deserializer.Deserialize(reader);
}
我的 XML 格式如下:
<requisitions>
<requisition>
<start_date></start_date>
<end_date></end_date>
<title></title>
<precise_location>
<address1/>
<city></city>
<display_city/>
<country></country>
</precise_location>
<contract_type></contract_type>
<experience></experience>
<job_type></job_type>
</requisition>
<requisition>
<start_date></start_date>
<end_date></end_date>
<title></title>
<precise_location>
<address1/>
<city></city>
<display_city/>
<country></country>
</precise_location>
<contract_type></contract_type>
<experience></experience>
<job_type></job_type>
</requisition>
</requisitions>
我要反序列化的类是这样的:
public class JobsModel
{
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(IsNullable = false)]
public partial class requisition
{
[System.Xml.Serialization.XmlElementAttribute(DataType = "date")]
public System.DateTime start_date { get; set; }
[System.Xml.Serialization.XmlElementAttribute(DataType = "date")]
public System.DateTime end_date { get; set; }
public string title { get; set; }
public requisitionPrecise_location precise_location { get; set; }
public string contract_type { get; set; }
public object experience { get; set; }
public object job_type { get; set; }
}
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class requisitionPrecise_location
{
public object address1 { get; set; }
public string city { get; set; }
public object display_city { get; set; }
public string country { get; set; }
}
}
解决方案
我使用 Visual Studio 的 Paste Special 功能来生成模型。但是我出错的地方是我复制到剪贴板的 XML 只有一个 Requisition 元素。因此,如果我将有多个申请,Visual Studio 并没有按照我需要的方式生成类。
【问题讨论】:
-
试试:typeof(JobsModel.requisition)
-
为什么有嵌套类?您的 实际 XML 是什么样的,是根元素
<requisitions>,复数,包含多个子元素吗? -
我使用 Visual Studio 的“Paste Special”功能来生成 JobsModel 类。我在帖子中的 XML 实际上是错误的!我会更新。顶层是
,其中包含多个 -
@CodeCaster 不知道为什么我有嵌套类。 Visual Studio 为我生成了这段代码。我所做的只是把它全部放在一个 JobsModel 类中。我可能做错了。
-
我不会阻止嵌套类。它只是根类需要匹配xml的根节点。我会将反序列化代码放在 JobsModel 类中,这样所有进行序列化的代码和类都在一个父类中。
标签: c# xml model-view-controller serialization