Как правило, вы должны сериализовать состояние (объекты), а не WSDL-сервисную обертку. Большая часть кода поколения, так как 2,0 будет записывать файлы в качестве partial
классов, а значит, вы можете добавить второй файл кода, чтобы добавить такие вещи, как атрибуты:
namespace MyNamespace
{
[Serializable] partial class Customer {}
[Serializable] partial class Order {}
[Serializable] partial class Address {}
}
Это сочетании с другой половиной в WSDL-порожденных типов , и должен сделать его пригодным для использования от BinaryFormatter
- однако лично Я подозреваю, что это плохой способ сделать это. Поскольку вы используете wsdl.exe, ваши типы уже сериализуются через XmlSerializer
. Вместо того, чтобы сериализовать их с помощью BinaryFormatter
(это то, что будет использоваться по умолчанию и которое очень хрупкое), рассмотрите их сериализацию с помощью XmlSerializer
до string
или byte[]
и добавьте , чтобы в состояние сеанса. Это будет работать без дополнительных изменений кода, и будет намного более надежным, так как это позволит избежать множества хрупких точек BinaryFormatter
.
Например:
static string SerializeXml<T>(T obj) where T : class
{
if (obj == null) return null;
StringWriter sw = new StringWriter();
using (XmlWriter xw = XmlWriter.Create(sw))
{
new XmlSerializer(typeof(T))
.Serialize(xw, obj);
}
return sw.ToString();
}
static T DeserializeXml<T>(string xml) where T : class
{
if (xml == null) return null;
using (XmlReader xr = XmlReader.Create(new StringReader(xml)))
{
return (T)new XmlSerializer(typeof(T))
.Deserialize(xr);
}
}
Почему ваше приложение нужно сериализовать сам экземпляр прокси? Поскольку это прокси-сервер веб-службы; разве у него просто есть методы для возврата данных транзакционно и заполнения некоторой структуры данных? Является ли структура данных действительно тем, что вы хотите сериализовать? – gn22
@ Арос, у меня есть тот же вопрос, что и у Гурды. Вы пытаетесь выполнить сериализацию самого прокси-объекта или данных, которые он несет? –