反序列化XML成为具有一流的字符串值在XML
让我解释一下,还有有1个XML命名列审计等常见类型列的数据库表。反序列化XML成为具有一流的字符串值在XML
所以这是可能的反序列化XML到类中。
<?xml version="1.0"?>
<entity type="Order">
<id type="System.Int64">146</id>
<ordernumber type="System.String">OD555</ordernumber>
<audits type='System.String'>
<audit>
<item>
<create timestamp='2017-07-19 10:02:13' userid='23' />
</item>
<invoice>
<create timestamp='2017-07-19 10:03:37' userid='45' />
</invoice>
</audit>
</audits>
</entity>
类:
public class Order
{
public long id { get; set; }
public string ordernumber { get; set; }
public string audits { get; set; }
}
与属性XmlType
和XmlAnyElement
修改你的模型(需要XmlElement
类型)
[XmlType("entity")]
public class Order
{
public long id { get; set; }
public string ordernumber { get; set; }
[XmlAnyElement]
public XmlElement audits { get; set; }
}
允许反序列化完整的XML字符串如
using (MemoryStream stream = new MemoryStream())
using (StreamWriter writer = new StreamWriter(stream))
{
writer.Write(xmlString);
writer.Flush();
stream.Position = 0;
XmlSerializer serializer = new XmlSerializer(typeof(Order));
Order o = (Order)serializer.Deserialize(stream);
}
现在你可以得到audits
作为字符串如
string auditsString = o.audits.InnerXml;
您还可以将属性添加到您的模型来简化访问:
public string auditsString
{
get
{
return audits.InnerXml;
}
}
是的,你解决了我的问题:)谢谢我将此标记为答案。 – user2972061
可能是你知道这个答案,以及:) https://*.com/questions/45299715/deserialize-xml-to-desire-class – user2972061
你可以尝试这样的
const string xmlString = @"<columns><column><c1>100</c1><c2>200</c2><cn>300</cn></column><column><c1>111</c1><c2>222</c2><cn>333</cn></column> <column> <c1>MAX Newsletter</c1><c2>OLS Application</c2> <cn>Total funded accounts</cn> </column></columns>";
XDocument doc = XDocument.Parse(xmlString);
if (doc.Root != null)
{
List<Row> items = (from r in doc.Root.Elements("column")
select new Row
{
C1 = (string)r.Element ("C1"),
C2 = (string)r.Element("C2"),
}).ToList();
不,这不是,我只好试着这么多东西,其实所有这一切我已经尝试考虑我的审计XML作为嵌套的XML,但实际上它是字符串。 – user2972061
请使用上面的代码的方法。 – Ravikumar
那么,什么是错的这个答案呢?这是一个很值得我怎么会做它 –
尝试XML LINQ:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication68
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
Order order = doc.Descendants("entity").Select(x => new Order()
{
id = (long)x.Element("id"),
ordernumber = (string)x.Element("ordernumber"),
audits = x.Descendants("create").Select(y => (DateTime)y.Attribute("timestamp")).ToList()
}).FirstOrDefault();
}
}
public class Order
{
public long id { get; set; }
public string ordernumber { get; set; }
public List<DateTime> audits { get; set; }
}
}
似乎'audits'包含其他节点。你确定你需要它作为字符串吗? ? – Fruchtzwerg
是的,我用这个字符串,这就是问题:(但我必须这样做 – user2972061
不该审核是:公开名单审核{获取;集;} –
jdweng