.Net Remoting 用到的BinaryFormatter,
现在可以得到BinaryFormatter序列化后的对像,比如是存在文件里的。
但想将其转换成SoapFormatter的(XML格式),存在另一个文件里。对于是自己程序里的对像,这是完全可行的,但如果是别的应用的对像,却会在转SoapFormatter的时候报错。
有高手知道是为什么吗? //把bin的文件转换成SOAP的文件
public bool readBin2Soap(string fromFile, string toFile){ Stream stream = File.Open(fromFile, FileMode.Open); //读取对像文件
sformatter = new SoapFormatter();
bformatter = new BinaryFormatter(); Object obj = (Object)bformatter.Deserialize(stream); //反序列化对像,可以成功。
Stream stream2 = File.Open(toFile, FileMode.Create);
sformatter.Serialize(stream2, obj); //这里会出错,报方法不支持的错误,具体不知原因。如果改为BianryFormatter,就可以。为什么啊。
stream2.Close();
stream.Close();
return true;
}大虾救命!!!!
现在可以得到BinaryFormatter序列化后的对像,比如是存在文件里的。
但想将其转换成SoapFormatter的(XML格式),存在另一个文件里。对于是自己程序里的对像,这是完全可行的,但如果是别的应用的对像,却会在转SoapFormatter的时候报错。
有高手知道是为什么吗? //把bin的文件转换成SOAP的文件
public bool readBin2Soap(string fromFile, string toFile){ Stream stream = File.Open(fromFile, FileMode.Open); //读取对像文件
sformatter = new SoapFormatter();
bformatter = new BinaryFormatter(); Object obj = (Object)bformatter.Deserialize(stream); //反序列化对像,可以成功。
Stream stream2 = File.Open(toFile, FileMode.Create);
sformatter.Serialize(stream2, obj); //这里会出错,报方法不支持的错误,具体不知原因。如果改为BianryFormatter,就可以。为什么啊。
stream2.Close();
stream.Close();
return true;
}大虾救命!!!!
sformatter = new SoapFormatter();
bformatter = new BinaryFormatter();
Object[] obj = (Object[])bformatter.Deserializ(stream); ///////////////
Stream stream2 = File.Open(toFile, FileMode.Create);
sformatter.Serialize(stream2, obj);
stream2.Close();
stream.Close();
return true;
}你试试看
at dotNetAgent.dNetConverter.readBin2Soap(String fromFile, String toFile) in i:\vsprojects\bin2xml\dotnetagent\dnetconverter.cs:line 110
at dotNetAgent.dNetConverter.ConvertBin(String fileName) in i:\vsprojects\bin2xml\dotnetagent\dnetconverter.cs:line 35
at Bin2XML.Form1.button1_Click(Object sender, EventArgs e) in I:\vsProjects\Bin2XML\Form1.cs:line 97
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.ComponentManager.System.Windows.Forms.UnsafeNativeMethods+IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
所以不能序列化。
所以不能序列化。
//测试用的可序列化对像
[Serializable]
public class TestObject
{
public int member1;
public string member2;
public string member3;
public double member4;
[NonSerialized] public string member5; public TestObject()
{
member1= 11;
member2 = "hello";
member3 = "hello";
member4 = 3.14159265;
member5 = "hello world!";
} public void Print()
{
Console.WriteLine("member1 = '{0}'", member1);
Console.WriteLine("member2 = '{0}'", member2);
Console.WriteLine("member3 = '{0}'", member3);
Console.WriteLine("member4 = '{0}'", member4);
Console.WriteLine("member5 = '{0}'", member5);
}
}
谢谢大家。