如何使用xml创建c#对象
我是C#、Silverlight 5和XAML初学者的新手。我正在从事一个VS-2012项目,我不必使用任何CycleClip板环来完成这项任务。我的VS项目中有一个XML文件。假设文件如下所示:如何使用xml创建c#对象,c#,xml,object,xml-parsing,xml-serialization,C#,Xml,Object,Xml Parsing,Xml Serialization,我是C#、Silverlight 5和XAML初学者的新手。我正在从事一个VS-2012项目,我不必使用任何CycleClip板环来完成这项任务。我的VS项目中有一个XML文件。假设文件如下所示: FileName is FileXml.xml <?xml version="1.0" encoding="utf-8" ?> <parameter> <name>mounts</name> <unit></
FileName is FileXml.xml
<?xml version="1.0" encoding="utf-8" ?>
<parameter>
<name>mounts</name>
<unit></unit>
<component>
<type>List</type>
<attributes>
<type>Integer</type>
<displayed>4</displayed>
<add_remove>yes</add_remove>
<item>25</item>
</attributes>
<attributes>
<ccypair>XAUUSD</ccypair>
<item>100</item>
</attributes>
</component >
</parameter>
文件名为FileXml.xml
坐骑
列表
整数
4.
对
25
XAUUSD
100
我必须解析这个XML文件,并且必须在C#中创建对象,以便能够使用“bands#umounts”(名称)和通过这些对象访问的所有其他元素。如何使用C代码实现这一点?您需要使用某种反序列化。下面是我不久前实施的一个示例:
public static class Serialization<T> where T : class
{
public static T DeserializeFromXmlFile(string fileName)
{
if (!File.Exists(fileName))
{
return null;
}
DataContractSerializer deserializer = new DataContractSerializer(typeof(T));
using (Stream stream = File.OpenRead(fileName))
{
return (T)deserializer.ReadObject(stream);
}
}
}
公共静态类序列化,其中T:class
{
公共静态T反序列化FromXmlFile(字符串文件名)
{
如果(!File.Exists(fileName))
{
返回null;
}
DataContractSerializer反序列化程序=新的DataContractSerializer(typeof(T));
使用(Stream=File.OpenRead(文件名))
{
return(T)反序列化器。ReadObject(stream);
}
}
}
然后你可以这样称呼它:
Serialization<YourCustomObject>.DeserializeFromXmlFile(yourFileNameOrPath);
[Serializable]
class parameter
{
[Datamember]
public string name {get; set;}
[Datamember]
public string label {get; set;}
[Datamember]
public string unit {get; set;}
[Datamember]
public component thisComponent {get; set;}
}
[Serializable]
class component
{
[Datamember]
public string type {get; set;}
[Datamember]
public List<attribute> attributes {get; set;}
}
[Serializable]
class attribute
{
[Datamember]
public string? type {get; set;}
[Datamember]
public string? displayed {get; set;}
[Datamember]
public string? add_remove {get; set;}
[Datamember]
public string? ccypair {get; set;}
[Datamember]
public List<int> item { get; set;}
}
Serialization.DeserializeFromXmlFile(您的文件名或路径);
请记住,必须有一个与要反序列化的XML对应的类。(又名变成物体)
你的班级看起来像这样:
Serialization<YourCustomObject>.DeserializeFromXmlFile(yourFileNameOrPath);
[Serializable]
class parameter
{
[Datamember]
public string name {get; set;}
[Datamember]
public string label {get; set;}
[Datamember]
public string unit {get; set;}
[Datamember]
public component thisComponent {get; set;}
}
[Serializable]
class component
{
[Datamember]
public string type {get; set;}
[Datamember]
public List<attribute> attributes {get; set;}
}
[Serializable]
class attribute
{
[Datamember]
public string? type {get; set;}
[Datamember]
public string? displayed {get; set;}
[Datamember]
public string? add_remove {get; set;}
[Datamember]
public string? ccypair {get; set;}
[Datamember]
public List<int> item { get; set;}
}
[可序列化]
类参数
{
[数据成员]
公共字符串名称{get;set;}
[数据成员]
公共字符串标签{get;set;}
[数据成员]
公共字符串单元{get;set;}
[数据成员]
公共组件thisComponent{get;set;}
}
[可序列化]
类组件
{
[数据成员]
公共字符串类型{get;set;}
[数据成员]
公共列表属性{get;set;}
}
[可序列化]
类属性
{
[数据成员]
公共字符串?类型{get;set;}
[数据成员]
公共字符串?显示{get;set;}
[数据成员]
公共字符串?add_remove{get;set;}
[数据成员]
公共字符串?ccypair{get;set;}
[数据成员]
公共列表项{get;set;}
}
因此它将读取xml文件。你的表亲对象就是结果对象吗?我说得对吗?此外,我将为您的表亲对象。name=“Band\u Amount”;我说的对吗???如果我错了,请您纠正我好吗?是的,您可以这样做YourCustomObject=Serialization.DeserializeFromXmlFile(YourFileName或Path)
将在XML中生成新的数据对象。请记住,为了正确反序列化,类中的属性必须与要从XML中提取的元素同名。是的,情况确实重要!我在你的类的答案中添加了更多的代码。你应该有一个很好的想法从那里去。谢谢它真的是一个很大的帮助