【问题标题】:How to create c# objects using xml如何使用 xml 创建 c# 对象
【发布时间】:2014-06-15 15:48:33
【问题描述】:

我是 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# 中创建对象。这样我才能使用“bands_amounts”(名称)和通过这些对象访问的所有其他元素。如何使用 C# 代码做到这一点?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 所以它会读取xml文件。和 YourCoustomObject 是结果对象?我对吗 ?进一步我会做 YourCoustomObject.name="Band_Amount";我对吗 ???如果我错了,你能纠正我吗?
    • 是的,你可以这样做YourCustomObject object = Serialization&lt;YourCustomObject&gt;.DeserializeFromXmlFile(yourFileNameOrPath);,这会在 XML 中生成一个新的数据对象。
    • 请记住,为了正确反序列化,您的类中的属性必须与您打算从 XML 中提取的元素命名相同。是的,大小写很重要!
    • 我添加了更多代码来回答您的班级可能是什么样的。你应该很清楚从那里去哪里。
    • 非常感谢它的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 2015-09-23
    相关资源
    最近更新 更多