3

このような例外が発生する理由と、データを逆シリアル化するにはどうすればよいですか? 注意 Deserialize(Stream serializationStream) メソッドは例外をスローします。ウリは正しいです。ファイルは私のコンピュータにあります

    public Structure DeserializeStructForXBAPApplication()
    {
        var uri = new Uri(@"myserialization.bin", UriKind.Relative);

        var info = Application.GetContentStream(uri);

        Debug.Assert(info != null, "info != null");

        var final = (Structure)new BinaryFormatter().Deserialize(info.Stream);

        return final;
    }

スローされる例外は次のとおりです。

A first chance exception of type 'System.Security.SecurityException' occurred in mscorlib.dll
Step into: Stepping over non-user code 'System.RuntimeType.CreateInstanceImpl'
Step into: Stepping over non-user code 'MS.Internal.Xaml.Runtime.ClrObjectRuntime.CreateInstance'
Step into: Stepping over non-user code 'System.Windows.Markup.WpfXamlLoader.Load'
Step into: Stepping over non-user code 'MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen'
Step into: Stepping over non-user code 'MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen'
Step into: Stepping over non-user code 'System.Windows.Markup.XamlReader.LoadBaml'
Step into: Stepping over non-user code 'System.Windows.Application.LoadBamlStreamWithSyncInfo'
Step into: Stepping over non-user code 'System.Windows.Threading.DispatcherOperation.InvokeImpl'
Step into: Stepping over non-user code 'System.Threading.ExecutionContext.RunInternal'
Step into: Stepping over non-user code 'System.Windows.Threading.Dispatcher.LegacyInvokeImpl'
Step into: Stepping over non-user code 'System.Windows.Threading.Dispatcher.PushFrameImpl'
Step into: Stepping over non-user code 'System.Windows.Application.StartDispatcherInBrowser'
Step into: Stepping over non-user code 'MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen'
Step into: Stepping over non-user code 'MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen'
Step into: Stepping over non-user code 'System.Windows.Threading.DispatcherOperation.InvokeImpl'
Step into: Stepping over non-user code 'System.Threading.ExecutionContext.RunInternal'
Step into: Stepping over non-user code 'System.Windows.Threading.Dispatcher.LegacyInvokeImpl'

EDIT それはで連載されました:

    public void SerializationStruct(Structure struc)
    {
        const string path = @"C:\myserialization.bin";


        //byte[] result;
        //Structure final;
        //using (var stream = new MemoryStream())

        using (var stream = new FileStream(path, FileMode.Create))
        {
            new BinaryFormatter().Serialize(stream, struc);
            stream.Flush();
            stream.Close();
            stream.Dispose();
            //result = stream.ToArray();
        }
    }

そして、関数の呼び出しを使用してデシリアライズすることが可能です

    public Structure  DeserializationStruct()
    {
        Structure final;
        const string path = @"C:\myserialization.bin";

        using (var rStream = new FileStream(path, FileMode.Open))
        {

             final =  (Structure)new BinaryFormatter().Deserialize(rStream);
             rStream.Close();
             rStream.Dispose();
        }

        return final;
    }

Winforms アプリケーションによって呼び出されます。したがって、シリアル化自体は問題ではないと思いますが、それは特権の問題です。

4

1 に答える 1

1

BinaryFormatter は、フィールド レベルのシリアライザです。サンドボックスで機能しない可能性があることは驚くべきことではありません。別のシリアライザーを試してみることをお勧めします.XmlSerializer、またはprotobuf-netが良いスタートになるでしょう.

BinaryFormatter は、異なるセットアップ間でデータを転送するのには適していません。単一のセットアップでもほとんど機能しません:p

于 2013-06-16T20:27:43.637 に答える