C#将XML反序列化为模型类错误-<;xmlns="&引用&燃气轮机;不期而至
我试图获取一个XML字符串并将其反序列化,然后将其绑定到我的模型类。但我得到了这个错误: System.InvalidOperationException:C#将XML反序列化为模型类错误-<;xmlns="&引用&燃气轮机;不期而至,c#,xml,model-view-controller,serialization,C#,Xml,Model View Controller,Serialization,我试图获取一个XML字符串并将其反序列化,然后将其绑定到我的模型类。但我得到了这个错误: System.InvalidOperationException:不是预期的 这是我调用反序列化的C#: var deserializer = new XmlSerializer(typeof(JobsModel),new XmlRootAttribute("requisition")); var jobs = new JobsModel(); using (var reader =
不是预期的
这是我调用反序列化的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>
解决方案
我使用了VisualStudio的粘贴特殊功能来生成模型。但我出错的地方是,我复制到剪贴板的XML只有一个
Requisition
元素。因此,如果我有多个申请,Visual Studio没有按照我需要的方式生成类。您不应该真正修改生成的类。如果需要,可以重命名根对象。但是做一些小的改变来测试每一个。“特殊粘贴+反序列化”与XML的预期效果一样。乙二醇
using System;
using System.IO;
using System.Xml.Serialization;
namespace ConsoleApp24
{
// NOTE: Generated code may require at least .NET Framework 4.5 or .NET Core/Standard 2.0.
/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class requisitions
{
private requisitionsRequisition[] requisitionField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("requisition")]
public requisitionsRequisition[] requisition
{
get
{
return this.requisitionField;
}
set
{
this.requisitionField = value;
}
}
}
/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class requisitionsRequisition
{
private object start_dateField;
private object end_dateField;
private object titleField;
private requisitionsRequisitionPrecise_location precise_locationField;
private object contract_typeField;
private object experienceField;
private object job_typeField;
/// <remarks/>
public object start_date
{
get
{
return this.start_dateField;
}
set
{
this.start_dateField = value;
}
}
/// <remarks/>
public object end_date
{
get
{
return this.end_dateField;
}
set
{
this.end_dateField = value;
}
}
/// <remarks/>
public object title
{
get
{
return this.titleField;
}
set
{
this.titleField = value;
}
}
/// <remarks/>
public requisitionsRequisitionPrecise_location precise_location
{
get
{
return this.precise_locationField;
}
set
{
this.precise_locationField = value;
}
}
/// <remarks/>
public object contract_type
{
get
{
return this.contract_typeField;
}
set
{
this.contract_typeField = value;
}
}
/// <remarks/>
public object experience
{
get
{
return this.experienceField;
}
set
{
this.experienceField = value;
}
}
/// <remarks/>
public object job_type
{
get
{
return this.job_typeField;
}
set
{
this.job_typeField = value;
}
}
}
/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class requisitionsRequisitionPrecise_location
{
private object address1Field;
private object cityField;
private object display_cityField;
private object countryField;
/// <remarks/>
public object address1
{
get
{
return this.address1Field;
}
set
{
this.address1Field = value;
}
}
/// <remarks/>
public object city
{
get
{
return this.cityField;
}
set
{
this.cityField = value;
}
}
/// <remarks/>
public object display_city
{
get
{
return this.display_cityField;
}
set
{
this.display_cityField = value;
}
}
/// <remarks/>
public object country
{
get
{
return this.countryField;
}
set
{
this.countryField = value;
}
}
}
class Program
{
static void Main(string[] args)
{
var 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>
";
using (var reader = new StringReader(xml))
{
var deserializer = new XmlSerializer(typeof(requisitions), new XmlRootAttribute("requisitions"));
var r = (requisitions)deserializer.Deserialize(reader);
}
Console.WriteLine("Hello World!");
}
}
}
使用系统;
使用System.IO;
使用System.Xml.Serialization;
名称空间控制台App24
{
//注意:生成的代码可能至少需要.NET Framework 4.5或.NET Core/Standard 2.0。
///
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute(“代码”)]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace=”“,IsNullable=false)]
公共部分类申请
{
私有请购单请购单[]请购单字段;
///
[System.Xml.Serialization.xmlementAttribute(“请购单”)]
公共请购单请购单[]请购单
{
得到
{
返回此.requisionfield;
}
设置
{
this.requisionfield=值;
}
}
}
///
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute(“代码”)]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
公共部分类请购单请购单
{
私有对象开始日期字段;
私有对象结束日期字段;
私有对象标题字段;
私有请购单请购单精确位置精确位置字段;
私有对象契约类型字段;
私人客体体验场;
私有对象作业类型字段;
///
公共对象开始日期
{
得到
{
返回此.start\u日期字段;
}
设置
{
this.start\u dateField=值;
}
}
///
公共对象结束日期
{
得到
{
返回此.end_日期字段;
}
设置
{
this.end_dateField=值;
}
}
///
公共物品所有权
{
得到
{
把这个还给我;
}
设置
{
this.titleField=值;
}
}
///
公共请购单请购单精确位置精确位置
{
得到
{
返回此.precision_location字段;
}
设置
{
this.precision_locationField=值;
}
}
///
公共对象契约类型
{
得到
{
返回此.contract\u类型字段;
}
设置
{
this.contract_typeField=值;
}
}
///
公共对象体验
{
得到
{
将此返回experienceField;
}
设置
{
此.experienceField=值;
}
}
///
公共对象作业类型
{
得到
{
返回此.job_类型字段;
}
设置
{
this.job_typeField=值;
}
}
}
///
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute(“代码”)]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
公共部分类请购单请购单精确位置
{
私有对象地址1字段;
私有对象城市域;
私有对象显示\u cityField;
私有对象字段;
///
公共对象地址1
{
得到
{
返回此.Address1字段;
}
设置
{
this.address1Field=值;
}
}
///
公共目标城市
{
得到
{
返回此.cityField;
}
设置
{
this.cityField=值;
}
}
///
城市公共物品展示
{
得到
{
返回此.display\u cityField;
}
设置
{
this.display_cityField=值;
}
}
///
公共目标国
{
得到
{
返回此.countryField;
}
设置
{
this.countryField=值;
}
}
}
班级计划
{
静态void Main(字符串[]参数)
{
var xml=@”
";
使用(var reader=newstringreader(xml))
{
var反序列化器=新的XmlSerializer(typeof(requisite
using System;
using System.IO;
using System.Xml.Serialization;
namespace ConsoleApp24
{
// NOTE: Generated code may require at least .NET Framework 4.5 or .NET Core/Standard 2.0.
/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class requisitions
{
private requisitionsRequisition[] requisitionField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("requisition")]
public requisitionsRequisition[] requisition
{
get
{
return this.requisitionField;
}
set
{
this.requisitionField = value;
}
}
}
/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class requisitionsRequisition
{
private object start_dateField;
private object end_dateField;
private object titleField;
private requisitionsRequisitionPrecise_location precise_locationField;
private object contract_typeField;
private object experienceField;
private object job_typeField;
/// <remarks/>
public object start_date
{
get
{
return this.start_dateField;
}
set
{
this.start_dateField = value;
}
}
/// <remarks/>
public object end_date
{
get
{
return this.end_dateField;
}
set
{
this.end_dateField = value;
}
}
/// <remarks/>
public object title
{
get
{
return this.titleField;
}
set
{
this.titleField = value;
}
}
/// <remarks/>
public requisitionsRequisitionPrecise_location precise_location
{
get
{
return this.precise_locationField;
}
set
{
this.precise_locationField = value;
}
}
/// <remarks/>
public object contract_type
{
get
{
return this.contract_typeField;
}
set
{
this.contract_typeField = value;
}
}
/// <remarks/>
public object experience
{
get
{
return this.experienceField;
}
set
{
this.experienceField = value;
}
}
/// <remarks/>
public object job_type
{
get
{
return this.job_typeField;
}
set
{
this.job_typeField = value;
}
}
}
/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class requisitionsRequisitionPrecise_location
{
private object address1Field;
private object cityField;
private object display_cityField;
private object countryField;
/// <remarks/>
public object address1
{
get
{
return this.address1Field;
}
set
{
this.address1Field = value;
}
}
/// <remarks/>
public object city
{
get
{
return this.cityField;
}
set
{
this.cityField = value;
}
}
/// <remarks/>
public object display_city
{
get
{
return this.display_cityField;
}
set
{
this.display_cityField = value;
}
}
/// <remarks/>
public object country
{
get
{
return this.countryField;
}
set
{
this.countryField = value;
}
}
}
class Program
{
static void Main(string[] args)
{
var 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>
";
using (var reader = new StringReader(xml))
{
var deserializer = new XmlSerializer(typeof(requisitions), new XmlRootAttribute("requisitions"));
var r = (requisitions)deserializer.Deserialize(reader);
}
Console.WriteLine("Hello World!");
}
}
}