Я думал, что Объект был неизвестным типизированным объектом?Не в XmlSerializationWriter - PullRequest
0 голосов
/ 06 октября 2011

У меня есть веб-сервис, который всегда возвращает ReturnObject, класс, который я написал так:

public class ReturnObject
{
    public Status Status { get; set; }
    public Object Data { get; set; }
}

Когда я возвращаю один объект, например, int или строку и т. Д. В Data, это нормально, но когда я хочу вернуть список типизированных объектов, клиент, который запускает веб-сервис в качестве WebReference, получает это исключение:

System.Web.Services.Protocols.SoapException: серверу не удалось обработать запрос. ---> System.InvalidOperationException: при создании документа XML произошла ошибка ---> System.InvalidOperationException: TypeN System.Collections.Generic.List`1 [[Transticket.Domain.Models.ApsisMailingList, Transticket.Domain, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = null]] может быть добавлено в текст. VID System.Xml.Serialization.XmlSerializationWriter.WriteTypedPrimitive (String name, String ns, Object o, Boolean xsiType) vid Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write1_Object (String n, String ns, Object o, Boolean isNullable, Boolean needType) vid Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write3_ReturnObject (String n, String ns, ReturnObject o, логическое значение isNullable, логическое значение needType)
VID Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write6_GetListsResponse (Object [] р) вид Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer5.Serialize (Объект objectToSerialize, XmlSerializationWriter writer) vid System.Xml.Serialization.XmlSerializer.Serialize (XmlWriter xmlWriter, Объект o, пространства имен XmlSerializerNamespaces, String encodingStyle, Идентификатор строки) --- Шлюха для стажировки в интернете ---
vid System.Xml.Serialization.XmlSerializer.Serialize (XmlWriter xmlWriter, Object o, пространства имен XmlSerializerNamespaces, String encodingStyle, String id) vid System.Web.Services.Protocols.SoapServerProtocol.WriteReturns (Object [] returnValues, Stream outputStream) vid System.Web.Services.Protocols.WebServiceHandler.WriteReturns (Object [] returnValues) vid System.Web.Services.Protocols.WebServiceHandler.Invoke () --- Шлюха По прошествии старейшины ---

Это исключение не в веб-сервисе, а в клиентском вызове веб-службы после возврата данных.

Если я сделаю там другой объект ReturnObject и укажу список типизированных объектов в качестве данных, он будет работать хорошо.

У кого-то есть идея, как это обобщить? Я всегда думал, что List является типом Object, но выглядит как ошибка .NET, или я что-то пропустил?

1 Ответ

2 голосов
/ 06 октября 2011

XmlSerializer не включает информацию о типе в вывод (контраст с BinaryFormatter);как таковой, нет надежного способа десериализации object, поскольку xml может быть (в буквальном смысле) чем угодно.

То же самое верно для большинства сериализаторов на основе контрактов (DataContractSerializer, protobuf-net,и т.д.).

В основном: не делайте этого.object бесполезно использовать в веб-сервисе, и это не может работать.

...