如何使用xml创建c#对象

时间:2014-04-29 15:38:36

标签: c# xml object xml-parsing xml-serialization

我是C#,Silverlight 5和XAML初学者的新手。我正在开发一个VS-2012项目,我不必使用任何CycleClip Board Ring来完成这项任务。我的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>

我必须解析这个XML文件,并且必须在C#中创建对象。所以我可以使用&#34; bands_amounts&#34; (名称)和通过这些对象访问的所有其他元素。如何使用C#代码执行此操作?

1 个答案:

答案 0 :(得分:2)

您将需要使用某种反序列化。以下是我不久前实施的一个示例:

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);
        }
    }
}

然后打电话给你,你会做这样的事情:

Serialization<YourCustomObject>.DeserializeFromXmlFile(yourFileNameOrPath);

请记住,您必须拥有与要反序列化的XML对应的类。 (又称变成了一个对象)。

你的课程看起来像这样:

[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;}
}