2016-04-05 34 views
0

這是我的XML結構:如何動態XML序列化與XmlSerializer的

<codelang1> 
     <prox>prox dans la langue</prox> 
     <libelle>libellé dans la langue</libelle> 
     <descriptif>descriptif dans la langue</descriptif> 
</codelang1> 
<codelang2> 
     <prox>prox dans la langue</prox> 
     <libelle>libellé dans la langue</libelle> 
     <descriptif>descriptif dans la langue</descriptif> 
</codelang2> 
... 
<codelang...n> 
     <libelle></libelle> 
     .... 
</codelang...n> 

我如何序列化這個XML與類C#? codelang改變。

+0

這是否有幫助? https://stackoverflow.com/questions/28769495/how-to-derive-xml-element-name-from-an-attribute-value-of-a-class-using-annotati – dbc

+1

不看這裏有一個簡單的方法做這件事。以上鍊接是最好的你會得到。它是一個恥辱,你不能添加像[XmlElement(「codelang *」)]的東西,即在元素名稱中使用通配符。 –

回答

0

有點晚,但試試這個.....

Usings

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Xml.Linq; 

public class Codelang 
{ 
    public string prox { get; set; } 
    public string libelle { get; set; } 
    public string descriptif { get; set; } 
} 

代碼

class Program 
{ 
    static void Main(string[] args) 
    { 
     string xmlfilepath = @"xml.xml"; 
     XDocument xmlsrcdoc = XDocument.Load(xmlfilepath); 
     List<Codelang> lstCodelang = new List<Codelang>(); 

     try 
     { 
      lstCodelang = xmlsrcdoc.Descendants() 
             .Elements("prox") 
             .Select(el => FromXElement<Codelang>(el.Parent)) 
             .ToList(); 

     } 
     catch (Exception) 
     { 

      throw; 
     } 
    } 

    public static T FromXElement<T>(XElement element) where T : class, new() 
    { 
     var typeOfT = typeof(T); 
     T value = new T(); 
     foreach (var subElement in element.Elements()) 
     { 
      var prop = typeOfT.GetProperty(subElement.Name.LocalName); 
      if (prop != null) 
      { 
       prop.SetValue(value, subElement.Value); 
      } 
     } 
     return value; 
    } 
} 

XML

<root> 
<codelang1> 
     <prox>prox dans la langue 1</prox> 
     <libelle>libellé dans la langue</libelle> 
     <descriptif>descriptif dans la langue</descriptif> 
</codelang1> 
<codelang2> 
     <prox>prox dans la langue 2</prox> 
     <libelle>libellé dans la langue</libelle> 
     <descriptif>descriptif dans la langue</descriptif> 
</codelang2> 
<codelang3> 
     <prox>prox dans la langue 3</prox> 
     <libelle>libellé dans la langue</libelle> 
     <descriptif>descriptif dans la langue</descriptif> 
</codelang3> 
</root> 

我正在將XML讀入應用程序生成文件夾中一個名爲xml.xml的文件中的字符串中......您將需要從其他位置獲取XML字符串或創建xml.xml文件並保存你的XML代碼上面的工作