通常、 WSDLサービスラッパーではなく、状態(エンティティ)をシリアル化します。2.0以降のほとんどのcode-genは、ファイルをpartial
クラスとして書き込みます。つまり、2番目のコードファイルを追加して、属性などを追加できます。
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);
}
}