是否存在以中等信任方式运行的BinaryFormatter替代方案

时间:2011-02-16 16:14:49

标签: c# .net security serialization

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

是否存在可在中等信任下运行的替代二进制格式化程序?

2 个答案:

答案 0 :(得分:3)

BinaryFormatter不适用于部分信任。 .NET Framework具有其他可用的格式化程序,它们可以部分信任:

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

无论您使用哪种序列化程序,某些类型根本无法在部分信任中完全序列化。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/bb412175.aspx

答案 1 :(得分:3)

感谢您的评论。对于那些感兴趣的人我最终使用了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);
    }
}