如何使用xml创建c#对象

如何使用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></

我是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></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中提取的元素同名。是的,情况确实重要!我在你的类的答案中添加了更多的代码。你应该有一个很好的想法从那里去。谢谢它真的是一个很大的帮助