2015-07-08 2 views
1

Я пытаюсь использовать MessagePack для сериализации моих объектов, но всякий раз, когда я пытаюсь запустить сериализацию, я получаю ошибку Unhandled Exception.System.TypeLoadException: доступ запрещен при использовании MessagePack

Вот мой код:

CSCDP_TCPClient.cs

using System.Text; 
using System.Threading.Tasks; 
using System.Net.Sockets; 
using System.Diagnostics; 
using System.IO; 
using MsgPack; 
using MsgPack.Serialization; 

namespace CSCDPApp 
{ 
    class CSCDP_TCPClient 
    { 
     public void Connect(string server, int portno, Script Script) 
     { 

      var serializer = MessagePackSerializer.Get<Script>(); 
      var tempstream = new MemoryStream(); 
      serializer.Pack(tempstream, script); 

      tempstream.Position = 0; 

      var deserializedObject = serializer.Unpack(tempstream); 
      Debug.WriteLine("Same object? {0}", Object.ReferenceEquals(script, deserializedObject)); 
     } 
    } 
} 

Script.cs:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace CSCDPApp 
{ 
    class Script 
    { 
     public string cardID; 
     public string time; 
     public string device; 
     public string command; 

     public Script() 
     { 
      //Parameterless Constructor for serialization 
     } 

     public Script(string cardID, string time, string device, string command) 
     { 
      this.cardID = cardID; 
      this.time = time; 
      this.device = device; 
      this.command = command; 
     } 
    } 
} 

И я просто звоню его в основном с:

 CSCDP_TCPClient tcpclient = new CSCDP_TCPClient(); 
     Script tempscript = new Script("test1","test2","test3","test4"); 
     tcpclient.Connect("0.0.0.0",1,tempscript); 

И вот ошибка Я получаю:

Unhandled Exception: System.TypeLoadException: Access is denied: 'MsgPack.Serial 
ization.MessagePackSerializer`1[CSCDPApp.Script]'. 
    at System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule module, I 
nt32 tk, ObjectHandleOnStack type) 
    at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock() 
    at System.Reflection.Emit.TypeBuilder.CreateType() 
    at MsgPack.Serialization.EmittingSerializers.FieldBasedSerializerEmitter.Crea 
teConstructor[T]() 
    at MsgPack.Serialization.EmittingSerializers.SerializerEmitter.CreateInstance 
[T](SerializationContext context) 
    at MsgPack.Serialization.EmittingSerializers.ILEmittingSerializerBuilder`2.<> 
c__DisplayClass5a.<CreateSerializerConstructor>b__59(SerializationContext contex 
t) 
    at MsgPack.Serialization.AbstractSerializers.SerializerBuilder`3.BuildSeriali 
zerInstance(SerializationContext context) 
    at MsgPack.Serialization.AutoMessagePackSerializer`1..ctor(SerializationConte 
xt context, ISerializerBuilder`1 builder) 
    at MsgPack.Serialization.MessagePackSerializer.CreateInternal[T](Serializatio 
nContext context) 
    at MsgPack.Serialization.SerializationContext.GetSerializer[T](Object provide 
rParameter) 
    at MsgPack.Serialization.MessagePackSerializer.Get[T](SerializationContext co 
ntext, Object providerParameter) 
    at CSCDPApp.CSCDP_TCPClient.Connect(String server, Int32 portno, Script scrip 
t) in d:\TFS\MSVC 2013_CTSDev1\CommonComponents\sdnet\tools\CSCDPService\CSCDPAp 
p\CSCDP_TCPClient.cs:line 21 
    at CSCDPApp.Program.Main(String[] args) in d:\TFS\MSVC 2013_CTSDev1\CommonCom 
ponents\sdnet\tools\CSCDPService\CSCDPApp\Program.cs:line 64 

У меня есть проект моей визуальной студии в моем диске D: и я проверил, что разрешения правильные. У меня есть MessagePack.dll в том же каталоге, что и все мои скомпилированные исполняемые файлы, и ссылка связана. Есть ли что-нибудь, что я могу потерять?

ответ

2

Выяснил это! Класс My Script не был объявлен публичным, поэтому сериализатор не смог найти его

 Смежные вопросы

  • Нет связанных вопросов^_^