C# 如何构造此XML的类?

C# 如何构造此XML的类?,c#,xml,deserialization,C#,Xml,Deserialization,如何将这个XML反序列化到C#中的类中 我在这些课上都学到了。请非常小心,因为某些更改区分大小写 用 private void frmXmlDeserialize_Load(object sender, EventArgs e) { try { XmlSerializer xs = new XmlSerializer(typeof(Root)); StreamReader sr = new StreamReader("import.xml");

如何将这个XML反序列化到C#中的类中


我在这些课上都学到了。请非常小心,因为某些更改区分大小写

private void frmXmlDeserialize_Load(object sender, EventArgs e)
{
    try
    {
        XmlSerializer xs = new XmlSerializer(typeof(Root));
        StreamReader sr = new StreamReader("import.xml");
        Root r = (Root)xs.Deserialize(sr);
        sr.Close();
    }
    catch (Exception ex)
    {
        Debug.WriteLine(ex.Message);
    }           
}
? 请发布您当前的代码,并解释哪些代码不起作用,以及您遇到的问题。请看一看-您可以使用它从XML生成一个XSD文件(尽管如果所做的假设不正确,您可能希望查看并更正它),然后在生成的XSD上再次运行它以生成一个C类。“它不起作用”这是对问题的拙劣描述。你能更具体地说明什么不起作用吗?例外情况?错误?预期的行为和实际的行为是什么?我说的是。这些是您需要了解的关于XML(和HTML)的基本知识。您有太多的
XmlRoot
s-XML文件只有一个根(在您的例子中是
root
元素)。
[Serializable]
public class User
{
    [XmlAttribute("userID")]
    public object UserId;
    [XmlAttribute("userRole")]
    public object UserRole;
    [XmlAttribute("channelID")]
    public object ChannelId;
}

[Serializable]
public class Message
{
    [XmlAttribute("id")]
    public object Id;
    [XmlAttribute("dateTime")]
    public object DateTime;
    [XmlAttribute("userID")]
    public object UserId;
    [XmlAttribute("userRole")]
    public object UserRole;
    [XmlAttribute("channelID")]
    public object ChannelId;
    [XmlElement("username")] 
    public object Username;
    [XmlElement("text")]
    public object Text;
}

[Serializable, XmlRoot("root")]
public class Root
{
    [XmlElement("infos")]
    public object Infos;

    [XmlElement("users")]
    public List<User> Users;

    [XmlElement("messages")]
    public List<Message> Messages;
}
System.InvalidOperationException was unhandled by user code
Message=There was an error reflecting type 'ConsoleApplication.Client.Root'.

Message=There was an error reflecting field 'Users'.

Message=There was an error reflecting type 'ConsoleApplication.Client.User'.

Message=There was an error reflecting field 'UserId'.

Message=Cannot serialize member 'UserId' of type System.Object. XmlAttribute/XmlText cannot be used to encode complex types.
// only one xml root element is allowed!
[Serializable]
public class User
{
    public User()
    {       }
    [XmlAttribute("userID")]
    public string UserId;
    [XmlAttribute("userRole")]
    public string UserRole;
    [XmlAttribute("channelID")]
    public string ChannelId;
}

[Serializable]
public class Message
{
    public Message()
    {     }
    [XmlAttribute("id")]
    public string Id;
    [XmlAttribute("dateTime")]
    public string DateTime;
    [XmlAttribute("userID")]
    public string UserId;
    [XmlAttribute("userRole")]
    public string UserRole;
    [XmlAttribute("channelID")]
    public string ChannelId;
    [XmlElement("username")]
    public string Username;
    [XmlElement("text")]
    public string Text;
}

[Serializable, XmlRoot("root")]
public class Root
{
    public Root()
    { }

    [XmlElement("infos")]
    public object Infos;

    [XmlArray]
    [XmlArrayItem(ElementName = "user", Type=typeof(User))]
    public User[] users;

    // define what type message is - XmlArray
    // each item within is of c# type Message but within xml file it's message
    [XmlArray]
    [XmlArrayItem(ElementName = "message", Type = typeof(Message))]
    public Message[] messages;
}
private void frmXmlDeserialize_Load(object sender, EventArgs e)
{
    try
    {
        XmlSerializer xs = new XmlSerializer(typeof(Root));
        StreamReader sr = new StreamReader("import.xml");
        Root r = (Root)xs.Deserialize(sr);
        sr.Close();
    }
    catch (Exception ex)
    {
        Debug.WriteLine(ex.Message);
    }           
}