XML反序列化不返回任何内容

时间:2015-10-11 19:30:19

标签: c# xml serialization

我正在反序列化这个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

2 个答案:

答案 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>元素 ,那么您的类定义就可以了。