Eine Ausnahme des Typs " System.- Laufzeit.Serialisierung.SerializationException " ist in mscorlib.dll wurde aber nicht behandelt werden, in Benutzer-code
Habe ich folgende Objekte:
[Serializable]
public class Module
{
[Key]
public int Id { get; set; }
public string ModuleName { get; set; }
public string FontAwesomeClass { get; set; }
}
[Serializable]
public class ModulosPorUsuario
{
[Key]
public int Id { get; set; }
public string Email { get; set; }
public virtual ICollection<Module> Modules{ get; set; }
}
Und ich bin mit der Methode, um cache in einen speziellen Schlüssel für jeden Benutzer seine zugeordneten Module.
///<summary>
///Gets the modules activated for a user
///</summary>
///<param name="email">Email address of the user</param>
///<returns>List of modules for the selected user</returns>
public static List<Models.ModulosPorUsuario> GetModulesForUser(string identityname)
{
///It needs to be cached for every user because every user can have different modules enabled.
var cachekeyname = "ApplicationModulesPerUser|" + identityname;
IDatabase cache = CacheConnectionHelper.Connection.GetDatabase();
List<Models.ModulosPorUsuario> listOfModulesPerUser = new List<Models.ModulosPorUsuario>();
listOfModulesPerUser = (List<Models.ModulosPorUsuario>)cache.Get(cachekeyname);
if (listOfModulesPerUser == null)
{
listOfModulesPerUser = dbApp.ModulosPorUsuario.Where(p => p.Email == identityname).ToList();
cache.Set(cachekeyname, listOfModulesPerUser, TimeSpan.FromMinutes(SettingsHelper.CacheModuleNames));
return listOfModulesPerUser;
}
else
{
return listOfModulesPerUser;
}
}
Ersten mal seine arbeiten, natürlich die Rückgabe der Daten aus der DB.
Aber das zweite mal, (es ist ein Objekt auf dem cache), aber die Liste der Module ist null:
http://screencast.com/t/OFB1vkvno
Ich habe auch diese helper-Klassen, die von stackexchange redis-cache:
public static class SampleStackExchangeRedisExtensions
{
public static T Get<T>(this IDatabase cache, string key)
{
return Deserialize<T>(cache.StringGet(key));
}
public static object Get(this IDatabase cache, string key)
{
return Deserialize<object>(cache.StringGet(key));
}
public static void Set(this IDatabase cache, string key, object value, TimeSpan expiration)
{
cache.StringSet(key, Serialize(value), expiration);
}
static byte[] Serialize(object o)
{
if (o == null)
{
return null;
}
BinaryFormatter binaryFormatter = new BinaryFormatter();
using (MemoryStream memoryStream = new MemoryStream())
{
binaryFormatter.Serialize(memoryStream, o);
byte[] objectDataAsStream = memoryStream.ToArray();
return objectDataAsStream;
}
}
static T Deserialize<T>(byte[] stream)
{
BinaryFormatter binaryFormatter = new BinaryFormatter();
if (stream == null)
return default(T);
using (MemoryStream memoryStream = new MemoryStream(stream))
{
T result = (T)binaryFormatter.Deserialize(memoryStream);
return result;
}
}
}
Ich weiß, es gibt Daten, die im Zusammenhang wegen der SAMEN:
#region Seed Modules
var module1 = new Module() { Id = 1, ModuleName = "Contabilidad", FontAwesomeClass = "fa-ambulance" };
var module2 = new Module() { Id = 2, ModuleName = "Recursos Humanos", FontAwesomeClass = "fa-heartbeat" };
var module3 = new Module() { Id = 3, ModuleName = "Inventario", FontAwesomeClass = "fa-anchor" };
var module4 = new Module() { Id = 4, ModuleName = "Produccion", FontAwesomeClass = "fa-binoculars" };
var module5 = new Module() { Id = 5, ModuleName = "Produccion", FontAwesomeClass = "fa-binoculars" };
var module6 = new Module() { Id = 6, ModuleName = "Ventas", FontAwesomeClass = "fa-coffee" };
var module7 = new Module() { Id = 7, ModuleName = "Compras", FontAwesomeClass = "fa-calendar-o" };
var module8 = new Module() { Id = 8, ModuleName = "Cotizaciones", FontAwesomeClass = "fa-building" };
context.Modulos.Add(module1);
context.Modulos.Add(module2);
context.Modulos.Add(module3);
context.Modulos.Add(module4);
context.Modulos.Add(module5);
context.Modulos.Add(module6);
context.Modulos.Add(module7);
context.Modulos.Add(module8);
context.SaveChanges();
#endregion
#region Seed ModulosPor Usuario
context.ModulosPorUsuario.Add(new ModulosPorUsuario()
{
Id=1,
Email = "[email protected]",
Modules = new List<Module>() { module1, module2 }
});
context.ModulosPorUsuario.Add(new ModulosPorUsuario()
{
Id=2,
Email = "[email protected]",
Modules = new List<Module>() { module3, module5 }
});
context.ModulosPorUsuario.Add(new ModulosPorUsuario()
{
Id=3,
Email = "[email protected]",
Modules = new List<Module>() { module4, module6 }
});
context.ModulosPorUsuario.Add(new ModulosPorUsuario()
{
Id=4,
Email = "[email protected]",
Modules = new List<Module>() { module7, module7 }
});
context.SaveChanges();
#endregion
Update1:
Dies ist die Fehlermeldung die ich bekomme, wenn ich versuche, den zwischengespeicherten Wert der 2. Zeit:
Eine Ausnahme des Typs " System.- Laufzeit.Serialisierung.SerializationException " ist in mscorlib.dll wurde aber nicht behandelt werden, in Benutzer-code
Additional information: Unable to find assembly 'EntityFrameworkDynamicProxies-Inspinia_MVC5, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.
stack-trace
at System.Runtime.Serialization.Formatters.Binary.BinaryAssemblyInfo.GetAssembly()
at System.Runtime.Serialization.Formatters.Binary.ObjectReader.GetType(BinaryAssemblyInfo assemblyInfo, String name)
at System.Runtime.Serialization.Formatters.Binary.ObjectMap..ctor(String objectName, String[] memberNames, BinaryTypeEnum[] binaryTypeEnumA, Object[] typeInformationA, Int32[] memberAssemIds, ObjectReader objectReader, Int32 objectId, BinaryAssemblyInfo assemblyInfo, SizedArray assemIdToAssemblyTable)
at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.ReadObjectWithMapTyped(BinaryObjectWithMapTyped record)
at System.Runtime.Serialization.Formatters.Binary.__BinaryParser.ReadObjectWithMapTyped(BinaryHeaderEnum binaryHeaderEnum)
InformationsquelleAutor Luis Valencia | 2015-07-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, Sie müssen erstellen, einen leeren Konstruktor für diese Art (siehe code-snippet unten) und instanziieren Sie Ihre Sammlung. Die Serialisierungs-engine wird es nicht tun für Sie, und es wird erwartet, dass diese Auflistung wird instanziiert.
Weiter, da Sie Ihre Sammlung-Eigenschaft ist eine Schnittstelle, und nicht eine Klasse, die Serialisierung ist wohl immer verwirrt, wenn Sie versuchen zu initialisieren dieser Eigenschaft und hinzufügen von Elementen.
dachte Sie initialisieren, bevor Sie serialisieren, wird der Serializer ist das instanzieren von Objekten in Ihrem Namen, wenn Sie deserialisiert werden.
Happy Coding.
gleiche problem besteht immer noch: screencast.com/t/4oYnk7JD5d
jede andere Idee, @Glenn Ferrie
Es sieht aus wie eine assembly fehlt, auf der Grundlage der screencast Sie zur Verfügung gestellt. wo ist die DLL?
gefunden: aber alle Baugruppen sind vorhanden. seine automatisch generierte scheinbar completedevelopment.blogspot.com/2010/09/...
InformationsquelleAutor Glenn Ferrie