我正在反序列化这个xml文档
<root>
<posts>
<post>
<id>7</id>
<USERNAME>sohaib</USERNAME>
<TITLE>help</TITLE>
<USERID>1</USERID>
</post>
<post>
<id>7</id>
<USERNAME>sohaib</USERNAME>
<TITLE>help</TITLE>
<USERID>1</USERID>
</post>
</posts>
<comments>
<comment>
<COMMENTID>2</COMMENTID>
<COMMENT_TEXT>help</COMMENT_TEXT>
</comment>
<comment>
<COMMENTID>2</COMMENTID>
<COMMENT_TEXT>help</COMMENT_TEXT>
</comment>
<comment>
<COMMENTID>2</COMMENTID>
<COMMENT_TEXT>help</COMMENT_TEXT>
</comment>
</comments>
</root>
和我的C#代码反序列化上面的xml文件是
XmlSerializer xsserializer = new XmlSerializer(typeof(root));
FileStream reader = new FileStream("abc.xml",FileMode.Open);
object obj = xsserializer.Deserialize(reader);
root timeline = (root) obj;
我的Root类看起来像
[Serializable, XmlRoot("root"), XmlType("root")]
public class root
{
[XmlElement("Posts")]
public List<Post> Posts =new List<Post>();
[XmlElement("Comments")]
public List<Comment> Comments = new List<Comment>();
}
public class Post
{
[XmlElement("TITLE")]
public string TITLE;
[XmlElement("USERID")]
public long USERID;
[XmlElement("USERNAME")]
public string USERNAME;
[XmlElement("id")]
public long id;
}
public class Comment
{
[XmlElement("COMMENTID")] public long COMMENTID;
[XmlElement("COMMENT_TEXT")] public string COMMENT_TEXT;
}
我没有异常没有错误,但仍然在帖子中提供0项,在评论中提供0。 你能帮我弄清楚我哪里出错了。感谢您的回复。 谢谢Sohaib
答案 0 :(得分:0)
XmlSerializer
区分大小写。
如果你修正了你的定义,你应该做得很好:
Posts -> posts (property name)
Comments -> comments (property name)
Post -> post (class name)
Comment -> comment (class name)
答案 1 :(得分:0)
如前所述,xml区分大小写,因此您必须重命名类才能与xml文档的元素名称完全匹配。
除此之外,您应该将$.ajax({
url: '@Url.Action("GetCharts", "Dashboard")',
type: 'POST',
dataType: 'json',
cache: false,
data: {
BankID: "48",
CompanyID: "0",
StartDate: "1/1/2001",
EndDate: "2/2/2002",
PercentByItemCount: false
},
});
课程更改为:
root
[Serializable, XmlRoot("root"), XmlType("root")]
public class root
{
[XmlArray("posts")]
[XmlArrayItem("post")]
public List<post> postList = new List<post>();
[XmlArray("comments")]
[XmlArrayItem("comment")]
public List<comment> comments = new List<comment>();
}
指定文档根节点中包含的列表的根节点,而XmlArray
指定该数组中的每个元素。
如果您的xml文档在XmlArrayItem
下直接包含<post>
,<comment>
元素 ,那么您的类定义就可以了。