我尝试反序列化的XML有很多字段,这些字段将数据嵌套在子字段中,我想将这些数据分配到类的父属性中,而不是创建其他不需要的结构
<?xml version="1.0" encoding="UTF-8"?>
<x:EventRecord eventid="EVR-1000">
<x:Postcode>
<x:ID>ABC123</x:ID>
</x:Postcode>
</x:EventRecord>
我创建了一个带有Postcode字符串属性的EventRecord类:
public class EventRecord
{
public string EventID { get; set; }
public string Postcode { get; set; }
}
是否有可以装饰属性的属性可以告诉反序列化器从嵌套的ID
字段中取出值?除了<x:Postcode>
之外,<x:ID>
中永远不会有任何其他字段。
还有办法将父eventid
节点上的x:EventRecord
XML属性分配给自己内的EventID
属性吗?
答案 0 :(得分:0)
使用以下xml:
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:x="abc">
<x:EventRecord eventid="EVR-1000">
<x:Postcode>
<x:ID>ABC123</x:ID>
</x:Postcode>
</x:EventRecord>
</root>
代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication16
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
XNamespace ns = doc.Root.GetNamespaceOfPrefix("x");
EventRecord record = doc.Descendants(ns + "EventRecord").Select(x => new EventRecord() {
EventID = (string)x.Attribute("eventid"),
Postcode = (string)x.Descendants(ns + "ID").FirstOrDefault()
}).FirstOrDefault();
}
}
public class EventRecord
{
public string EventID { get; set; }
public string Postcode { get; set; }
}
}