現在、ASP.NET (3.5) アプリケーションを SQLServer SessionState
モードで実行するように変更しています。既存のコードには、現在
C# を使用してセッションに格納されているシリアル化されたデータセットがあります。このシリアル化されたデータセットを抽出して XmlDataDocument に読み込むために使用するプロパティがあります。私の財産は次のような「何か」です:
public abstract class TransCommand
{
public static XmlDataDocument TransDoc
{
get
{
XmlDataDocument doc = null;
if (Session["DataSetStore"] != null)
{
DataSet tds3 = new DataSet();
MemoryStream tms3 = new MemoryStream(HttpContext.Current.Session["DataSetStore"] as byte[]);
doc = new XmlDataDocument();
doc.LoadXml(System.Text.Encoding.UTF8.GetString(tms3.ToArray()));
}
return doc;
}
set
{
Session["DataSetStore"] = System.Text.Encoding.UTF8.GetBytes(value.OuterXml);
}
}
この
TransDoc メソッドから作成されたノードに XmlNode を追加しようとする場合を除いて、これはうまく機能します。
public class AddChildren
{
XmlDataDocument doc = TransactionCommand.TransactionDoc;
doc.DataSet.EnforceConstraints = false;
XmlNode dataNode = doc.SelectSingleNode("//WebServiceResponse/Data");
......
ArrayList lstNewInfants = new ArrayList();
1stNewInfants.add(newInfants); //Adding new Infants XmlNodes into an arraylist.
foreach (XmlNode nodInfant in lstNewInfants)
{
dataNode.AppendChild(nodInfant);
}
doc.DataSet.EnforceConstraints = true;
TransactionCommand.TransactionDoc = doc; //Adds the modified doc back into the session
このノードを追加した後、次のページ aspx ページのデータバインドが発生した後に、次の例外を受け取ります。
Error Message:Type 'System.Xml.XmlBoundElement' in Assembly 'System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable.
Stack Trace: at System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type)
at System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context)
at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo()
at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter)
at System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter)
at System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck)
at System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck)
at System.Web.Util.AltSerialization.WriteValueToStream(Object value, BinaryWriter writer)
何か案は?