2010-09-08 4 views
5

Я пытаюсь сериализовать/deserialize сгенерированный прокси-код веб-службы WCF из svcutil. Хотя я могу сериализовать объекты, я не могу десериализовать их обратно на объекты. Вот XML я сгенерировал через сериализацию:Как сериализовать/десериализовать сгенерированный прокси-код 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> 

У меня есть несколько вопросов:

  1. Я уже использую XmlSerializerNamespaces объявить пространство имен для соответствия имен, указанных в сгенерированном коде прокси. Как получилось, что тег «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(); 
        } 
    
  2. Когда я пытаюсь десериализация 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); 
         } 
        } 
    
  3. Код прокси генерируется SvcUtil для взаимодействия с веб-службы WCF. Все созданные объекты сериализуются/десериализируются должным образом, когда я просто использую вызов веб-службы.

У кого-нибудь были подобные проблемы раньше?

ответ

4

WCF использует специализированные XML-сериализаторы для сериализации объектов, которые будут генерировать XML по-разному от стандартного XmlSerializer. Вы можете использовать XmlSerializer, но вам нужно будет правильно присвоить свой класс объекту objectToBeSerialized. Вероятно, лучше просто использовать сериализаторы WCF.

Посмотрите на эту статью:

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

Смежные вопросы