2010-09-08 9 views
5

Ich versuche, generierten WCF-Web-Service-Proxy-Code von SVCutil zu serialisieren/deserialisieren. Während ich die Objekte serialisieren kann, kann ich sie nicht zu Objekten deserialisieren. Hier ist der XML-I durch Serialisierung erzeugt:Wie serialisieren/deserialisieren Sie generierten WCF-Proxy-Code?

<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> 

ich ein paar Fragen:

  1. Ich bin schon XmlSerializerNamespaces mit dem Namespace deklarieren den Namespace in der generierten Proxy-Code angegeben übereinstimmen. Wie kommt es, dass es noch ein "p4" -Tag gibt, dass es zum "SomeObject" -Tag hinzugefügt und einen neuen XML-Namespace hinzugefügt hat (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(); 
        } 
    
  2. Wenn ich versuche, die XML mit dem folgenden Code zu deserialisieren, bekomme ich folgende Fehlermeldung: „System.InvalidOperationException:. Es gab einen Fehler das XML-Dokument zu erzeugen ---> System.Xml.XmlException: 'p4: type' ist ein doppelter Attributname. "

    using (TextReader textReader = new StringReader(xmlString)) 
        { 
         using (XmlReader xmlReader = XmlReader.Create(textReader)) 
         { 
          XmlSerializer serializer = new XmlSerializer(typeof(T), defaultNamespace); 
          return (T)serializer.Deserialize(xmlReader); 
         } 
        } 
    
  3. Der Proxy-Code wird von svcutil erzeugt mit einem WCF-Webdienst zu kommunizieren. Alle generierten Objekte werden ordnungsgemäß serialisiert/deserialisiert, wenn ich nur den Web-Service-Aufruf verwende.

Hat jemand schon ähnliche Probleme gehabt?

Antwort

4

WCF verwendet spezialisierte XML-Serializer zum Serialisieren von Objekten, die XML anders als den Standard-XmlSerializer generieren. Sie können XmlSerializer verwenden, aber Sie müssen Ihre Klasse für das Objekt objectToBeSerialized richtig zuordnen. Es ist wahrscheinlich besser, stattdessen die WCF-Serializer zu verwenden.

einen Blick auf diesen Artikel nehmen:

http://msdn.microsoft.com/en-us/magazine/cc163569.aspx

Verwandte Themen