簡體   English   中英

使用自定義名稱空間將XML字符串解析為Object

[英]Parse XML string to Object with custom namespace

我需要將XML字符串解析為c#對象。 如果它是有效的XML,我可以使用LINQ to XML函數解析它

<root>
   <child1>item on child1</child1>
   <child2>item on child2</child2>
</root>

我將其解析為對象的方式是:

public static T Deserialize<T>(string xml, string elementName)
{
    var xDoc = XDocument.Parse(xml);

    var x = xDoc.Element(elementName);

    var result = Activator.CreateInstance<T>();

    foreach (var node in x.Elements())
    {
        if (node.Elements().Any())
        {
           continue;
        }

        var properties = typeof(T).GetProperties();

        var property = properties.SingleOrDefault(p => p.Name == node.Name.LocalName);

        property = property ?? properties.SingleOrDefault(p => p.IsDefined(typeof(XmlElementAttribute), false) && ((XmlElementAttribute)Attribute.GetCustomAttribute(p, typeof(XmlElementAttribute))).ElementName == node.Name.LocalName);

        if (property == null)
        {
           continue;
        }

        property.SetValue(result, Convert.ChangeType(node.Value, property.PropertyType));

    }

        return result;
  }

但是,如果XML字符串具有自定義名稱空間,則我不能使用相同的方法:

<te:array>
     <te:v>tumper</te:v>
     <te:v>gottag?</te:v>
     <te:v>f</te:v>
</te:array>

我不知道是否可以使用任何方法來解析自定義名稱空間,所有幫助都將非常有用。

您可以使用XmlSerializer並調用Deserialize方法

var x = new XmlSerializer (typeof(MyStronglyType));
MyStronglyType m = (MyStronglyType) x.Deserialize(myStream);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM