2016-07-13 2 views
0

私はこのSOAPメッセージを持っていると私はC#のオブジェクトにシリアライズする必要があります。C#の - デシリアライズSOAPメッセージ

<SOAP-ENV:Envelope xmlns:SOAPSDK1="http://www.w3.org/2001/XMLSchema" xmlns:SOAPSDK2="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAPSDK3="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 
    <SOAPSDK4:GetStoreInformationResponse xmlns:SOAPSDK4="http://www.example.com/message/"> 
     <StoreInformation> 
     <StoreID>99612</StoreID> 
     <BusinessDate>2016-01-28</BusinessDate> 
     <Address type="Address-US"> 
      <Street>Via Roma 1</Street> 
      <City>Milano</City> 
     </Address> 
     </StoreInformation> 
    </SOAPSDK4:GetStoreInformationResponse> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

私はシリアライズの多くの例を見つけましたが、私は私の場合にはこれらを適用することはできません。 誰かが私を助けることができますか?

おかげ

答えて

1

あなたはC#クラスを生成するために、Xsd.exeではツールを試してみて、コードのこの部分を使用することができます:あなたのオブジェクトを生成する

/// <summary> 
    /// Methode de deserialisation d'objets 
    /// </summary> 
    /// <param name="xmlObject">Document XML à désérialiser</param> 
    /// <returns>Retourne l'objet chargé avec les données du document XML passé en paramètres</returns> 
public static ObjectTypeT Deserialize(XmlDocument xmlObject) 
{ 
    if (xmlObject == null) 
     throw new NullXmlDocumentException(); 
    if (xmlObject.DocumentElement == null) 
     throw new NullXmlDocumentElementException(); 

    using (XmlNodeReader reader = new XmlNodeReader(xmlObject.DocumentElement)) 
    { 
     XmlSerializer serializer = new XmlSerializer(typeof(ObjectTypeT)); 
     return (ObjectTypeT)serializer.Deserialize(reader); 
    } 
} 

。まずXmlDocumentにXmlをロードする必要があります。

+0

ありがとうございましたが、私はこのエラーを受け取ります"return(GetStoreInformationResponse)serializer.Deserialize(reader);":XMLドキュメントでエラーが発生しました。内部の例外は:予期しない

+0

生成されたC#クラスを投稿できますか? –

+0

下記の私のアンサーを参照してください;) –

0

下記のコードを試してください。私はロード(文字列filename)を使用していますが、またパース(文字列XML)

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


namespace ConsoleApplication2 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 
      XDocument doc = XDocument.Load(FILENAME); 

      var StoreInformation = doc.Descendants().Where(x => x.Name.LocalName == "StoreInformation").Select(y => new { 
       storeID = (string)y.Elements().Where(z => z.Name.LocalName == "StoreID").FirstOrDefault(), 
       businessDate = (DateTime)y.Elements().Where(z => z.Name.LocalName == "BusinessDate").FirstOrDefault(), 
       type = (string)y.Elements().Where(z => z.Name.LocalName == "Address").Select(a => a.Attribute("type")).FirstOrDefault(), 
       street = (string)y.Elements().Where(z => z.Name.LocalName == "Address").Select(a => a.Element(a.Name.Namespace + "Street")).FirstOrDefault(), 
       city = (string)y.Elements().Where(z => z.Name.LocalName == "Address").Select(a => a.Element(a.Name.Namespace + "City")).FirstOrDefault() 
      }).ToList(); 

     } 
    } 
} 
+0

ありがとう、大きな構造では少し不快ですが、 –

+0

構造内の5つの項目が大きいですか?私は非常に堅牢なコードを作成しました。 – jdweng

+0

はい、5つのアイテムはほとんどありませんが、例のコードだけでなく、大きな構造でも同じロジックを使用する必要があります; –

0

ロムえを使用することができ、これは、生成されたC#クラスである:

//------------------------------------------------------------------------------ 
// <auto-generated> 
//  Il codice è stato generato da uno strumento. 
//  Versione runtime:4.0.30319.42000 
// 
//  Le modifiche apportate a questo file possono provocare un comportamento non corretto e andranno perse se 
//  il codice viene rigenerato. 
// </auto-generated> 
//------------------------------------------------------------------------------ 

using System.Xml.Serialization; 

// 
// Codice sorgente generato automaticamente da xsd, versione=4.0.30319.33440. 
// 


/// <remarks/> 
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.33440")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.example.com/message/")] 
[System.Xml.Serialization.XmlRootAttribute(Namespace = "http://www.example.com/message/", IsNullable = false)] 
public partial class GetStoreInformationResponse 
{ 

    private GetStoreInformationResponseStoreInformation storeInformationField; 

    /// <remarks/> 
    [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public GetStoreInformationResponseStoreInformation StoreInformation 
    { 
     get 
     { 
      return this.storeInformationField; 
     } 
     set 
     { 
      this.storeInformationField = value; 
     } 
    } 
} 

/// <remarks/> 
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.33440")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.example.com/message/")] 
public partial class GetStoreInformationResponseStoreInformation 
{ 

    private string storeIDField; 

    private string businessDateField; 

    private GetStoreInformationResponseStoreInformationAddress[] addressField; 

    /// <remarks/> 
    [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string StoreID 
    { 
     get 
     { 
      return this.storeIDField; 
     } 
     set 
     { 
      this.storeIDField = value; 
     } 
    } 

    /// <remarks/> 
    [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string BusinessDate 
    { 
     get 
     { 
      return this.businessDateField; 
     } 
     set 
     { 
      this.businessDateField = value; 
     } 
    } 

    /// <remarks/> 
    [System.Xml.Serialization.XmlElementAttribute("Address", Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public GetStoreInformationResponseStoreInformationAddress[] Address 
    { 
     get 
     { 
      return this.addressField; 
     } 
     set 
     { 
      this.addressField = value; 
     } 
    } 
} 

/// <remarks/> 
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.33440")] 
[System.SerializableAttribute()] 
[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true, Namespace = "http://www.example.com/message/")] 
public partial class GetStoreInformationResponseStoreInformationAddress 
{ 

    private string streetField; 

    private string cityField; 

    private string typeField; 

    /// <remarks/> 
    [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string Street 
    { 
     get 
     { 
      return this.streetField; 
     } 
     set 
     { 
      this.streetField = value; 
     } 
    } 

    /// <remarks/> 
    [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public string City 
    { 
     get 
     { 
      return this.cityField; 
     } 
     set 
     { 
      this.cityField = value; 
     } 
    } 

    /// <remarks/> 
    [System.Xml.Serialization.XmlAttributeAttribute()] 
    public string type 
    { 
     get 
     { 
      return this.typeField; 
     } 
     set 
     { 
      this.typeField = value; 
     } 
    } 
} 
関連する問題