我想反序列化 xml 文件。这是有问题的 xml 文件:
<MessageList category="Alarm" version="1.0.0">
<Item id="1">
<Message key="Level" text="Alarm" />
<Message key="Title" text="ERROR AT PLC UNIT" />
<Message key="Detail" text="Change PLC unit. 
If it is out of order. please contact our service man." />
</Item>
<Item id="2">
<Message key="Level" text="Alarm" />
<Message key="Title" text="RE-SET PLC UNIT ( PROGRAM FS )" />
<Message key="Detail" text="Turn off and restart. if the problem persists. check thet the switch on the controller is in RUN mode. 
If it is out of order. please contact our service man." />
</Item>
<Item id="3">
<Message key="Level" text="Alarm" />
<Message key="Title" text="" />
<Message key="Detail" text="" />
</Item>
<Item id="4">
<Message key="Level" text="Alarm" />
<Message key="Title" text="" />
<Message key="Detail" text="" />
</Item>
<Item id="5">
<Message key="Level" text="Alarm" />
<Message key="Title" text="" />
<Message key="Detail" text="" />
</Item>
是否可以在不使用 linq-to-xml 的情况下将 xml 反序列化为字典? 你好,我想反序列化一个 xml 文件。这是有问题的 xml 文件 我想获得如下所示的两个课程。链接到 MessageList 的类,其中包含所有其他 Items 元素。 您可能已经注意到,所有项目都有一个代表它们的唯一 ID。所以我想将它用作字典键并将消息元素包含在列表中作为字典值。
class MessageListClass
{
public string category { get; set; }
public string version { get; set; }
public List< Dictionary<int, List<Message> > > items { get; set; }
}
public class Message
{
public string key { get; set; }
public string text { get; set; }
}
目前,我已经使用 System.Xml.Serialization 中的属性以这种方式完成了。它运作良好,但它们不是字典。有没有办法使用 System.Xml.Serialization 属性而不是 Linq-to-Xml 来获取像我想要的字典?
[XmlRoot("MessageList")]
class MessageList
{
[XmlAttribute("category")]
public string category { get; set; }
[XmlAttribute("version")]
public string version { get; set; }
[XmlElement("Item")]
public List<Item> items { get; set; }
}
public class Item
{
[XmlAttribute("id")]
public int alarmId { get; set; }
[XmlElement("Message")]
public List<Message> messages { get; set; }
}
public class Message
{
[XmlAttribute("key")]
public string key { get; set; }
[XmlAttribute("text")]
public string text { get; set; }
}
我建议为序列化和其他用途保留单独的模型。这对于模型不完全匹配的情况很有帮助。专用于序列化的类有时称为“数据传输对象”或“DTO”。
您可以添加一种方法以从一种模型转换为另一种模型:
class MessageListDTO
{
[XmlAttribute("category")]
public string Category { get; set; }
[XmlAttribute("version")]
public string Version { get; set; }
[XmlElement("Item")]
public List<ItemDTO> Items { get; set; }
public MessageList ToModel(){
return new MessageList(){
Category = Category,
Version = Version,
Items = Items.ToDictionary(
i => i.AlarmId ,
i => i.Messages.Select(m => m.ToModel()).ToList())
};
}