XML 反序列化不同对象 C#
XML Deserialization Diffrent Objects C#
也许有人可以给我提示以处理特定情况。我有一个我无法更改的 XML,它看起来像这样:
<?xml version = "1.0" encoding = "ISO-8859-1"?>
<bde>
<Host name="172.16.25" port="1234"/>
<Datafile name="bde-%d-%s.txt"/>
<Linien>
<Linie id="2,3,4,6,7,10,12">
<Parameter name="a"/>
<Parameter name="b"/>
<Parameter name="c"/>
<Parameter name="d"/>
<Parameter name="e"/>
<Parameter name="f"/>
<Parameter name="g"/>
<Parameter name="h"/>
<Parameter name="i"/>
<Parameter name="j"/>
<Parameter name="k"/>
<Parameter name="l"/>
</Linie>
<Linie id="1,11">
<Parameter name="a"/>
<Parameter name="n"/>
</Linie>
<Linie id="5">
<Parameter name="a"/>
<Parameter name="b"/>
<Parameter name="n"/>
<Parameter name="ö"/>
<Parameter name="z"/>
<Parameter name="e"/>
<Parameter name="r"/>
<Parameter name="z"/>
</Linie>
<Linie id="8">
<Parameter name="a"/>
</Linie>
<Linie id="9">
<Parameter name="a"/>
<Parameter name="p"/>
<Parameter name="z"/>
<Parameter name="y"/>
<Parameter name="q"/>
<Parameter name="oi"/>
<Parameter name="c"/>
<Parameter name="k"/>
<Parameter name="b"/>
</Linie>
</Linien>
</bde>
现在我必须将“Linien”序列化为对象,但它们具有不同的参数计数。
是否可以在 C# 中像这样读取此 XML?
此致,
亨德里克
如果我没猜错,您想将 XML 转换为 C# 数据结构。如果是这样,这是可能的,并且有一些图书馆可以帮助您。
就我个人而言,我会创建一个 Linie 和 Linien class,其中 Linien class 具有一个 Linie 对象向量(因此每个 Linien 对象支持不同数量的 Linie)
尝试以下操作:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
namespace ConsoleApplication166
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XmlReader reader = XmlReader.Create(FILENAME);
XmlSerializer serializer = new XmlSerializer(typeof(BDE));
BDE bde = (BDE)serializer.Deserialize(reader);
}
}
[XmlRoot("bde")]
public class BDE
{
public Host Host { get; set; }
public Datafile Datafile { get; set; }
[XmlArray(ElementName = "Linien")]
[XmlArrayItem(ElementName = "Linie")]
public List<Linie> Linie { get; set; }
}
public class Host
{
[XmlAttribute()]
public string name { get; set; }
[XmlAttribute()]
public string port { get; set; }
}
public class Datafile
{
[XmlAttribute()]
public string name { get; set; }
}
public class Linie
{
[XmlAttribute()]
public string id { get; set; }
[XmlElement()]
public List<Parameter> Parameter { get; set; }
}
public class Parameter
{
[XmlAttribute()]
public string name { get; set; }
}
}
也许有人可以给我提示以处理特定情况。我有一个我无法更改的 XML,它看起来像这样:
<?xml version = "1.0" encoding = "ISO-8859-1"?>
<bde>
<Host name="172.16.25" port="1234"/>
<Datafile name="bde-%d-%s.txt"/>
<Linien>
<Linie id="2,3,4,6,7,10,12">
<Parameter name="a"/>
<Parameter name="b"/>
<Parameter name="c"/>
<Parameter name="d"/>
<Parameter name="e"/>
<Parameter name="f"/>
<Parameter name="g"/>
<Parameter name="h"/>
<Parameter name="i"/>
<Parameter name="j"/>
<Parameter name="k"/>
<Parameter name="l"/>
</Linie>
<Linie id="1,11">
<Parameter name="a"/>
<Parameter name="n"/>
</Linie>
<Linie id="5">
<Parameter name="a"/>
<Parameter name="b"/>
<Parameter name="n"/>
<Parameter name="ö"/>
<Parameter name="z"/>
<Parameter name="e"/>
<Parameter name="r"/>
<Parameter name="z"/>
</Linie>
<Linie id="8">
<Parameter name="a"/>
</Linie>
<Linie id="9">
<Parameter name="a"/>
<Parameter name="p"/>
<Parameter name="z"/>
<Parameter name="y"/>
<Parameter name="q"/>
<Parameter name="oi"/>
<Parameter name="c"/>
<Parameter name="k"/>
<Parameter name="b"/>
</Linie>
</Linien>
</bde>
现在我必须将“Linien”序列化为对象,但它们具有不同的参数计数。 是否可以在 C# 中像这样读取此 XML?
此致, 亨德里克
如果我没猜错,您想将 XML 转换为 C# 数据结构。如果是这样,这是可能的,并且有一些图书馆可以帮助您。
就我个人而言,我会创建一个 Linie 和 Linien class,其中 Linien class 具有一个 Linie 对象向量(因此每个 Linien 对象支持不同数量的 Linie)
尝试以下操作:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
namespace ConsoleApplication166
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XmlReader reader = XmlReader.Create(FILENAME);
XmlSerializer serializer = new XmlSerializer(typeof(BDE));
BDE bde = (BDE)serializer.Deserialize(reader);
}
}
[XmlRoot("bde")]
public class BDE
{
public Host Host { get; set; }
public Datafile Datafile { get; set; }
[XmlArray(ElementName = "Linien")]
[XmlArrayItem(ElementName = "Linie")]
public List<Linie> Linie { get; set; }
}
public class Host
{
[XmlAttribute()]
public string name { get; set; }
[XmlAttribute()]
public string port { get; set; }
}
public class Datafile
{
[XmlAttribute()]
public string name { get; set; }
}
public class Linie
{
[XmlAttribute()]
public string id { get; set; }
[XmlElement()]
public List<Parameter> Parameter { get; set; }
}
public class Parameter
{
[XmlAttribute()]
public string name { get; set; }
}
}