有没有办法在分布式缓存中缓存元数据(EdmModel)?
我们有一个多租户系统,其中元数据可以根据客户端的不同而变化。我们目前正在为客户端构建元数据,然后将其缓存为InMemory。构建这些元数据是很昂贵的,所以我们必须缓存它。
看起来不可能使用二进制序列化来序列化EdmModel,然后使用像Redis这样的分布式缓存来缓存它。
我有以下代码来序列化模型,但它不起作用。
IEdmModel model = GetEdmModel();
using (MemoryStream memorystream = new MemoryStream())
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(memorystream, model); // Error is thrown here
byte[] yourBytesToDb = memorystream.ToArray();
}我得到以下错误
Type 'Microsoft.OData.Edm.EdmModel' in Assembly
'Microsoft.OData.Edm, Version=7.7.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'
is not marked as serializable.有没有其他方法来序列化模型?
发布于 2020-11-20 14:17:04
您可以尝试查看以下内容。
https://docs.microsoft.com/en-us/odata/odatalib/edm/read-write-model
private byte[] ConvertToBytes(IEdmModel model)
{
using (var memoryStream = new MemoryStream())
{
using (var writer = XmlWriter.Create(memoryStream))
{
IEnumerable<EdmError> errors;
CsdlWriter.TryWriteCsdl(model, writer, CsdlTarget.OData, out errors);
}
return memoryStream.ToArray();
}
}
private IEdmModel ConvertFromBytes(byte[] modelBytes)
{
using (var ms = new MemoryStream(modelBytes))
{
using (var reader = XmlReader.Create(ms))
{
IEnumerable<EdmError> errors;
IEdmModel model;
if (CsdlReader.TryParse(reader, out model, out errors))
{
return model;
}
throw new InvalidOperationException($"Model Error: {string.Join(",", errors.Select(_ => _.ErrorMessage))}");
}
}
}https://stackoverflow.com/questions/64888198
复制相似问题