.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;
}大虾救命!!!!

解决方案 »

  1.   

    public bool readBin2Soap(string fromFile, string toFile){   Stream stream = File.Open(fromFile, FileMode.Open); //读取对像文件
       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;
    }你试试看
      

  2.   

    还是不行啊,报另一个错。未处理的异常: System.InvalidCastException: 指定的转换无效。
       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)
      

  3.   

    你没有继承Soap序列化的接口。
    所以不能序列化。
      

  4.   

    你没有继承Soap序列化的接口。
    所以不能序列化。
      

  5.   

    什么是Soap序列化的接口,为什么下面这个就可以?
    //测试用的可序列化对像
    [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);
    }
    }
      

  6.   

    知道原因了,读出来的对像是个系统对像,是不支持soap格式的。
    谢谢大家。