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