相关疑难解决方法(0)

在C#中序列化匿名委托

我试图确定使用以下序列化代理来启用匿名函数/委托/ lambdas的序列化可能导致什么问题.

// see http://msdn.microsoft.com/msdnmag/issues/02/09/net/#S3
class NonSerializableSurrogate : ISerializationSurrogate
{
    public void GetObjectData(object obj, SerializationInfo info, StreamingContext context)
    {
        foreach (FieldInfo f in obj.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic))
            info.AddValue(f.Name, f.GetValue(obj));
    }

    public object SetObjectData(object obj, SerializationInfo info, StreamingContext context,
                                ISurrogateSelector selector)
    {
        foreach (FieldInfo f in obj.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic))
            f.SetValue(obj, info.GetValue(f.Name, f.FieldType));
        return obj;
    }
}  
Run Code Online (Sandbox Code Playgroud)

清单1 改编自 Counting Demo

我可以想到的主要问题可能是一个问题是匿名类是内部编译器细节,并且它的结构不能保证在.NET Framework的修订版之间保持不变.我很确定这是基于我对迭代器的类似问题的研究.

背景

我正在调查匿名函数的序列化.我期待这不起作用,但发现它确实在某些情况下.只要lambda没有&强制编译器生成匿名类,一切正常.

如果编译器需要生成的类来实现匿名函数,则抛出SerializationException.这是因为编译器生成的类未标记为可序列化.

namespace Example
{
    [Serializable]
    class Other
    {
        public int Value;
    }

    [Serializable] …
Run Code Online (Sandbox Code Playgroud)

c# serialization .net-3.5

37
推荐指数
2
解决办法
2万
查看次数

我们可以将代理保存在文件中(C#)

我有一个有委托成员的班级.我可以为该类的每个实例化对象设置委托,但还没有找到任何保存该对象的方法

c# delegates

21
推荐指数
3
解决办法
1万
查看次数

标签 统计

c# ×2

.net-3.5 ×1

delegates ×1

serialization ×1