先ほどの質問serialising an object to an XmlDocument
in C#については、asmxスタイルのWebサービス呼び出しから返されたXmlDocument
にいくつかのフォルト情報をシリアル化する必要がありました。クライアント上で私はXmlDocument
をオブジェクトに逆シリアル化する必要があります。XMLにシリアライズしてシリアライズされたオブジェクトの型を含める
タイプを知っていれば分かりやすいですが、デシリアライズするタイプもXmlDocument
でエンコードされている柔軟なアプローチが必要なことがわかりました。私が最初にXmlDocument
から戻って、このタイプ名を取得し、タイプを作成
Type type = fault.GetType();
string assemblyName = type.Assembly.FullName;
// Strip off the version and culture info
assemblyName = assemblyName.Substring(0, assemblyName.IndexOf(",")).Trim();
string typeName = type.FullName + ", " + assemblyName;
を次にクライアント上:私は現在、次のように計算され、タイプ名を持つXmlDocument
にXmlNode
を追加することによって、手動でやっていますこれXmlSerialiser
に渡されるオブジェクト:
object fault;
XmlNode faultNode = e.Detail.FirstChild;
XmlNode faultTypeNode = faultNode.NextSibling;
// The typename of the fault type is the inner xml of the first node
string typeName = faultTypeNode.InnerXml;
Type faultType = Type.GetType(typeName);
// The serialised data for the fault is the second node
using (var stream = new StringReader(faultNode.OuterXml))
{
var serialiser = new XmlSerializer(faultType);
objectThatWasSerialised = serialiser.Deserialize(stream);
}
return (CastToType)fault;
は、これは強引なアプローチである、と私は何とか、自動的にシリアル化されたタイプの型名を含む、よりエレガントな解決策があるかどう不思議ではなく、手動で記録しました。それ以外の場所?
+1は良いコピー/ペースト可能なコードを提供し、私の人生をちょっと簡単にします。 – Phil