xml 反序列化为对象 c#
xml deserialize to object c#
我在字符串中有 xml 个对象,我想将其反序列化为 C# 对象。我已经测试了简单的性别 class 并且它工作正常但不确定为什么我的其他 xml 文档不起作用
xml
<StudentByPersonCode>
<StudentByPersonCode list="1">
<Item>
<PERSON_CODE>33317</PERSON_CODE>
<FORENAME>Louis</FORENAME>
<MIDDLE_NAMES>Ane</MIDDLE_NAMES>
<SURNAME>Sullivan</SURNAME>
<TITLE>MISS</TITLE>
<SEX>F</SEX>
<DATE_OF_BIRTH>1/01/1998 00:00:00</DATE_OF_BIRTH>
<PROGRESS_STATUS>A</PROGRESS_STATUS>
</Item>
</StudentByPersonCode>
</StudentByPersonCode>
学生Class对象
[Serializable]
[XmlRoot("StudentByPersonCode")]
public class Student
{
[XmlElement("StudentByPersonCode ")]
public List<StudentListWrap> StudentListWrap = new List<StudentListWrap>();
public WebServiceStatus WebServiceStatus { get; set; }
}
public class StudentListWrap
{
[XmlAttribute("list")]
public string ListTag { get; set; }
[XmlElement("Item")]
public List<Students> Students = new List<Students>();
}
public class Students
{
[XmlElement("PERSON_CODE")]
public int PersonCode { get; set; }
[XmlElement("TITLE")]
public string Title { get; set; }
[XmlElement("FORENAME")]
public string Forename { get; set; }
[XmlElement("MIDDLE_NAMES")]
public string MiddleName { get; set; }
[XmlElement("SURNAME")]
public string Surname { get; set; }
[XmlElement("SEX")]
public string Sex { get; set; }
[XmlElement("DATE_OF_BIRTH")]
public DateTime DateOfBirth { get; set; }
[XmlElement("PROGRESS_STATUS")]
public string ProgressStatus { get; set; }
}
Class 反序列化
public static T DeserializeXMLToObject<T>(string xml) where T : class
{
T obj = null;
StringReader strReader = null;
XmlSerializer serializer = null;
XmlTextReader xmlReader = null;
try
{
strReader = new StringReader(xml);
serializer = new XmlSerializer(typeof(T));
xmlReader = new XmlTextReader(strReader);
obj = (T)serializer.Deserialize(xmlReader);
}
catch (Exception exp)
{
//Handle Exception Code
var s = "d";
}
finally
{
if (xmlReader != null)
{
xmlReader.Close();
}
if (strReader != null)
{
strReader.Close();
}
}
return (T)Convert.ChangeType(obj, typeof(T));
}
}
工作正常的 XML 文档
<Genders>
<Genders list="1">
<Item>
<CODE>M</CODE>
<DESCRIPTION>Male</DESCRIPTION>
</Item>
<Item>
<CODE>F</CODE>
<DESCRIPTION>Female</DESCRIPTION>
</Item>
</Genders>
</Genders>
性别对象class
[Serializable]
[XmlRoot("Genders")]
public class Gender
{
[XmlElement("Genders")]
public List<GenderListWrap> GenderListWrap = new List<GenderListWrap>();
public WebServiceStatus WebServiceStatus { get; set; }
}
public class GenderListWrap
{
[XmlAttribute("list")]
public string ListTag { get; set; }
[XmlElement("Item")]
public List<Item> GenderList = new List<Item>();
}
public class Item
{
[XmlElement("CODE")]
public string Code { get; set; }
[XmlElement("DESCRIPTION")]
public string Description { get; set; }
}
我建议你不小心在这一行添加了一个space:
[XmlElement("StudentByPersonCode ")]
试试这个:
[XmlElement("StudentByPersonCode")]
首先,如@rbr94 所述,[XmlElement("StudentByPersonCode ")] 中的空格。
其次,DateTime 字段解析不正确。正确的是,例如:
<DATE_OF_BIRTH>2011-01-10</DATE_OF_BIRTH>
。无论如何,您不需要那里的时间作为出生日期。
如果必须从 XML 解析日期,则正确的日期格式为:
2010-01-01T00:00:00
我在字符串中有 xml 个对象,我想将其反序列化为 C# 对象。我已经测试了简单的性别 class 并且它工作正常但不确定为什么我的其他 xml 文档不起作用
xml
<StudentByPersonCode>
<StudentByPersonCode list="1">
<Item>
<PERSON_CODE>33317</PERSON_CODE>
<FORENAME>Louis</FORENAME>
<MIDDLE_NAMES>Ane</MIDDLE_NAMES>
<SURNAME>Sullivan</SURNAME>
<TITLE>MISS</TITLE>
<SEX>F</SEX>
<DATE_OF_BIRTH>1/01/1998 00:00:00</DATE_OF_BIRTH>
<PROGRESS_STATUS>A</PROGRESS_STATUS>
</Item>
</StudentByPersonCode>
</StudentByPersonCode>
学生Class对象
[Serializable]
[XmlRoot("StudentByPersonCode")]
public class Student
{
[XmlElement("StudentByPersonCode ")]
public List<StudentListWrap> StudentListWrap = new List<StudentListWrap>();
public WebServiceStatus WebServiceStatus { get; set; }
}
public class StudentListWrap
{
[XmlAttribute("list")]
public string ListTag { get; set; }
[XmlElement("Item")]
public List<Students> Students = new List<Students>();
}
public class Students
{
[XmlElement("PERSON_CODE")]
public int PersonCode { get; set; }
[XmlElement("TITLE")]
public string Title { get; set; }
[XmlElement("FORENAME")]
public string Forename { get; set; }
[XmlElement("MIDDLE_NAMES")]
public string MiddleName { get; set; }
[XmlElement("SURNAME")]
public string Surname { get; set; }
[XmlElement("SEX")]
public string Sex { get; set; }
[XmlElement("DATE_OF_BIRTH")]
public DateTime DateOfBirth { get; set; }
[XmlElement("PROGRESS_STATUS")]
public string ProgressStatus { get; set; }
}
Class 反序列化
public static T DeserializeXMLToObject<T>(string xml) where T : class
{
T obj = null;
StringReader strReader = null;
XmlSerializer serializer = null;
XmlTextReader xmlReader = null;
try
{
strReader = new StringReader(xml);
serializer = new XmlSerializer(typeof(T));
xmlReader = new XmlTextReader(strReader);
obj = (T)serializer.Deserialize(xmlReader);
}
catch (Exception exp)
{
//Handle Exception Code
var s = "d";
}
finally
{
if (xmlReader != null)
{
xmlReader.Close();
}
if (strReader != null)
{
strReader.Close();
}
}
return (T)Convert.ChangeType(obj, typeof(T));
}
}
工作正常的 XML 文档
<Genders>
<Genders list="1">
<Item>
<CODE>M</CODE>
<DESCRIPTION>Male</DESCRIPTION>
</Item>
<Item>
<CODE>F</CODE>
<DESCRIPTION>Female</DESCRIPTION>
</Item>
</Genders>
</Genders>
性别对象class
[Serializable]
[XmlRoot("Genders")]
public class Gender
{
[XmlElement("Genders")]
public List<GenderListWrap> GenderListWrap = new List<GenderListWrap>();
public WebServiceStatus WebServiceStatus { get; set; }
}
public class GenderListWrap
{
[XmlAttribute("list")]
public string ListTag { get; set; }
[XmlElement("Item")]
public List<Item> GenderList = new List<Item>();
}
public class Item
{
[XmlElement("CODE")]
public string Code { get; set; }
[XmlElement("DESCRIPTION")]
public string Description { get; set; }
}
我建议你不小心在这一行添加了一个space:
[XmlElement("StudentByPersonCode ")]
试试这个:
[XmlElement("StudentByPersonCode")]
首先,如@rbr94 所述,[XmlElement("StudentByPersonCode ")] 中的空格。
其次,DateTime 字段解析不正确。正确的是,例如:
<DATE_OF_BIRTH>2011-01-10</DATE_OF_BIRTH>
。无论如何,您不需要那里的时间作为出生日期。
如果必须从 XML 解析日期,则正确的日期格式为:
2010-01-01T00:00:00