После поиска 99% сети я все еще застрял в следующем вопросе. У меня есть веб-сервис, который должен соответствовать WSDL, предоставленному компанией-партнером. Вызов метода этого сервиса приводит к (сложному) классу. К сожалению, ошибка сериализации возникает при вызове службы.
Я точно определил проблему, но не могу придумать (и найти) ее решение. Поскольку я зависим от wsdl, который был предоставлен, я не могу изменить структуру сложного класса. Надеюсь, кто-нибудь знает, что мне не хватает. Вот пример кода для воспроизведения моей проблемы:
[System.SerializableAttribute()]
public class MyObject
{
public int Id { get; set; }
public object Item { get; set; } // <---- Note type *object* here
}
[System.SerializableAttribute()]
public class MyItem
{
public int Id { get; set; }
public string Name { get; set; }
}
[TestClass]
public class SerializationTest
{
[TestMethod]
public void Serializing()
{
MyObject myObject = new MyObject { Id = 1 };
myObject.Item = new MyItem[] { new MyItem { Id = 1, Name = "Test" } };
string serializedString = SerializeObjectToXmlString(myObject, new []{ typeof(MyItem)});
Assert.IsFalse(String.IsNullOrWhiteSpace(serializedString));
}
/// <summary>
/// This method serializes objects to an XML string using the XmlSerializer
/// </summary>
private static string SerializeObjectToXmlString(object theObject, Type[] types)
{
using (var oStream = new System.IO.MemoryStream())
{
var oSerializer = new System.Xml.Serialization.XmlSerializer(theObject.GetType(), types);
oSerializer.Serialize(oStream, theObject); // <- Here the error is raised
return System.Text.Encoding.Default.GetString(oStream.ToArray());
}
}
}
В Try / Catch возникает ошибка после вызова метода Serialize (). Подробности этой ошибки:
InvalidOperationException was unhandled by user code
- There was an error generating the XML document.
The type MyItem[] may not be used in this context.
Мой контекст разработки состоит из Visual Studio 2010, .Net Framework 3.5.
Редактировать # 1: добавлены атрибуты сериализации, но ошибка остается