2017-07-19 4 views
1

は、この上で、私のxmlを夢中にされて:xmlns属性が存在する場合、xmlをC#クラスに解析する方法は?

<?xml version="1.0"?> 
<ArrayOfWorItems xmlns="http://someUrl" xmlns:i="http://www.w3.org/"> 
<WorkItem> 
    <ItemID>596</ItemID> 
    <ItemPressure>35.0000</ItemPressure> 
    <ItemTableID>14</ItemTableID> 
    <ItemVersion>AAAAAAAADGQ=</ItemVersion> 
    <ItemTemperature>-196.0000</ItemTemperature> 
</WorkItem> 
<WorkItem> 
    <ItemID>596</ItemID> 
    <ItemPressure>35.0000</ItemPressure> 
    <ItemTableID>14</ItemTableID> 
    <ItemVersion>AAAAAAAADGQ=</ItemVersion> 
    <ItemTemperature>-196.0000</ItemTemperature> 
</WorkItem> 
<WorkItem> 
    <ItemID>596</ItemID> 
    <ItemPressure>35.0000</ItemPressure> 
    <ItemTableID>14</ItemTableID> 
    <ItemVersion>AAAAAAAADGQ=</ItemVersion> 
    <ItemTemperature>-196.0000</ItemTemperature> 
</WorkItem> 
    <WorkItem> 
    <ItemID>596</ItemID> 
    <ItemPressure>35.0000</ItemPressure> 
    <ItemTableID>14</ItemTableID> 
    <ItemVersion>AAAAAAAADGQ=</ItemVersion> 
    <ItemTemperature>-196.0000</ItemTemperature> 
</WorkItem> 

</ArrayOfWorItems> 

私は私のクラスにこれを解析する:

[XmlRoot("ArrayOfWorItems")] 
public class ArrayOfWorItems 
{ 
    public List<WorkItem> WorkItem { get; set; } 
} 

ロジック:

var doc = new XmlDataDocument(); 

    doc.Load(path); 


    XmlNamespaceManager xmlNS = new XmlNamespaceManager(doc.NameTable); 

    xmlNS.AddNamespace("stupid_xmlns", @"http://someUrl"); 

    string contents = doc.OuterXml; 

    MyXmlHandler handler = new MyXmlHandler(); 

    var t = handler.ParseXml<ArrayOfWorItems>(contents); 

Parseメソッド:

public T ParseXml<T>(string xmlStream) 
    { 
     XmlSerializer serializer = new XmlSerializer(typeof(T)); 
     using (StringReader reader = new StringReader(xmlStream)) 
     { 
      var items = (T)(serializer.Deserialize(reader)); 

      return items; 
     } 
    } 

Er ROR:

InnerException = {"http://someUrl'> was not expected."} Message = "There is an error in XML document (1, 23)."

はしばらくの間、これを関係者とそれを把握するカント、 はどのように私はこれを解決するのですか?

答えて

1

RootクラスもNamespace属性で指定する必要があります。

[XmlRoot("ArrayOfWorItems", Namespace = "http://someUrl")] 
+0

質問には正しいのでこの回答を受け入れますが、このすべての作業を行うために私は別の回答も追加しました。ありがとう@Gowri Pranith – ThunD3eR

0

友人と相談した後、私はそれをすべてうまく動作させることができました。

@Gowri Pranithは最初から右のお金にactuuallyましたが、私は間違った名前空間に入れていたと私はそれを考え出したら、私はまた別の問題があった:私はJSONオブジェクトを解析に使用し、したがって、論理午前

解析時に異なります。鉱山の 友達がXML、JSONを解析する際に、この同じように処理されませんので、私は私の親クラスの内部でリストプロパティを持つことができないことを私に知らせ、作業するには、このための正しい方法は次のようになります。

[XmlRoot("ArrayOfWorItems", Namespace = "http://someUrl")] 
public class ArrayOfWorItems: List<WorkItem> 
{ 
} 

親クラスはリストを継承し、パーサーはそれらを子としてレンダリングします

関連する問題