Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否有可供选择的二进制格式化程序,可在中等信任度下运行_C#_.net_Security_Serialization - Fatal编程技术网

C# 是否有可供选择的二进制格式化程序,可在中等信任度下运行

C# 是否有可供选择的二进制格式化程序,可在中等信任度下运行,c#,.net,security,serialization,C#,.net,Security,Serialization,我在托管环境中运行一个网站(即,我无法控制权限),并且该网站设置为以中等信任度运行。我使用的代码序列化对象以保存在数据库中,并使用BinaryFormatter。但是,这会引发在中等信任下运行的SecurityException 是否有可供选择的二进制格式化程序可以在中等信任下运行?二进制格式化程序不是设计为在部分信任下工作的。.NET Framework还有其他可用的格式化程序,它们以部分信任的方式工作: XmlSerializer和DataContractSerializer适用于

我在托管环境中运行一个网站(即,我无法控制权限),并且该网站设置为以中等信任度运行。我使用的代码序列化对象以保存在数据库中,并使用BinaryFormatter。但是,这会引发在中等信任下运行的SecurityException


是否有可供选择的二进制格式化程序可以在中等信任下运行?

二进制格式化程序不是设计为在部分信任下工作的。.NET Framework还有其他可用的格式化程序,它们以部分信任的方式工作:

XmlSerializer和DataContractSerializer适用于序列化类型,如记录,其中对象图是有限的,所有要序列化的类型都提前知道。它们还可以与其他非.NET框架进行互操作。NetDataContractSerializer更适合于通用.NET framework序列化,在这种情况下,您可能不知道要提前序列化的图形中的所有类型。最大的缺点是它不能轻松地与其他非.NET框架进行互操作,因为它在序列化流中包含类型信息


无论使用哪个序列化程序,某些类型根本无法在部分信任中序列化。有关更多信息,请参阅。

谢谢您的评论。对于那些感兴趣的人,我最终使用了Newtonsofts JsonSerializer 使用BsonWriter,它以中等信任度工作。请参见下面的示例代码:

public object Deserialize<T>(System.IO.Stream serializationStream)
{
    JsonSerializer serializer = new JsonSerializer();
    T instance;

    BsonReader reader = new BsonReader(serializationStream);
    instance = serializer.Deserialize<T>(reader);

    return instance;
}

public void Serialize(System.IO.Stream serializationStream, object graph)
{
    JsonSerializer serializer = new JsonSerializer();

    using (BsonWriter writer = new BsonWriter(serializationStream))
    {
        serializer.Serialize(writer, graph);
    }
}
公共对象反序列化(System.IO.Stream serializationStream)
{
JsonSerializer serializer=新的JsonSerializer();
T例;
BsonReader=新的BsonReader(序列化流);
实例=序列化程序。反序列化(读取器);
返回实例;
}
public void Serialize(System.IO.Stream serializationStream,对象图)
{
JsonSerializer serializer=新的JsonSerializer();
使用(BsonWriter writer=新的BsonWriter(序列化流))
{
序列化器。序列化(编写器、图形);
}
}

为什么要将对象序列化为二进制以保存到数据库中?我正在使用CQRS和eventsourcing实现一个解决方案,以便使用Newtonsoft.Json将事件对象存储在单个表中
;使用Newtonsoft.Json.Bson通过NuGet安装后:
安装软件包Newtonsoft.Json