Я пытаюсь сериализовать/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>
У меня есть несколько вопросов:
Я уже использую 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(); }
Когда я пытаюсь десериализация 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. Все созданные объекты сериализуются/десериализируются должным образом, когда я просто использую вызов веб-службы.
У кого-нибудь были подобные проблемы раньше?