我想從svcutil序列化/反序列化生成的WCF Web服務代理代碼。雖然我能夠序列化對象,但我無法將它們反序列化回對象。下面是我通過序列化生成的XML:我已經使用XmlSerializerNamespaces聲明命名空間來匹配生成的代理代碼中指定的命名空間如何序列化/反序列化生成的WCF代理代碼?
:
<RootObject xmlns="http://schemas.myco.com/online/sync/2008/11"> <WrapperObject> <Objects> <SomeObject p4:type="Foo" ContextId="d5f9f021-b2a1-47ba-9f25-1e068194dc87" ObjectId="fad3ef87-3944-459d-b45b-1e4e52ef24db" xmlns:p4="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.myco.com/online/sync/2008/11" /> </Objects> </WrapperObject> </RootObject>
我有幾個問題。爲什麼還會有一個「p4」標籤添加到「SomeObject」標籤並添加了新的xml名稱空間(xmlns:p4 =「http://www.w3.org/2001/XMLSchema-instance」)。
using (XmlWriter xmlWriter = XmlWriter.Create(stringBuilder, xmlSettings)) { XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces(); namespaces.Add(string.Empty, defaultNamespace); XmlSerializer serializer = new XmlSerializer(typeof(T), defaultNamespace); serializer.Serialize(xmlWriter, objectToBeSerialized, namespaces); return stringBuilder.ToString(); }
當我嘗試用下面的代碼反序列化的XML,我得到以下錯誤:「System.InvalidOperationException:有一個錯誤生成XML文檔---> System.Xml.XmlException: 'p4:type'是重複的屬性名稱。「
using (TextReader textReader = new StringReader(xmlString)) { using (XmlReader xmlReader = XmlReader.Create(textReader)) { XmlSerializer serializer = new XmlSerializer(typeof(T), defaultNamespace); return (T)serializer.Deserialize(xmlReader); } }
代理代碼由SvcUtil工具生成具有WCF web服務進行通信。當我只使用Web服務調用時,所有生成的對象都被正確序列化/反序列化。
有沒有人有過類似的問題?