C# 如何构造此XML的类?
如何将这个XML反序列化到C#中的类中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");
我在这些课上都学到了。请非常小心,因为某些更改区分大小写 用
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);
}
}