我有这个SOAP消息,我需要序列化为C#对象:
<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>
我发现了很多序列化的例子,但我不能将这些应用到我的案例中。 有人可以帮帮我吗?
这是生成的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;
}
}
}
答案 0 :(得分:1)
您可以尝试使用xsd.exe工具生成C#类,并使用这段代码:
/// <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。
答案 1 :(得分:0)
请尝试以下代码。我使用Load(字符串FILENAME),但您也可以使用Parse(字符串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();
}
}
}