首页 > 解决方案 > Lazy 的二进制序列化.net 核心中的对象

问题描述

我将我的项目转换为 .net core 3.1 (c#),现在当我尝试二进制序列化一个Lazy<T>对象时,我得到一个System.Runtime.Serialization.SerializationException.

有没有办法做到这一点?

此示例代码适用于 .net 框架并在 .net 核心中引发异常:

class Program
{
    static void Main(string[] args)
    {
        var lazyS = new Lazy<LazyObject>(() => { return new LazyObject(); });
        UtilityLibrary.TestSerializable(lazyS);
        Console.ReadLine();
    }
}

public static class UtilityLibrary
{
    public static void TestSerializable(object obj)
    {
        if (obj == null)
            return;

        Type t = obj.GetType();
        Console.WriteLine($"isSerializable - {t.IsSerializable}");

        var formatter = new BinaryFormatter();
        using (var stream = new FileStream("data.bin", FileMode.Create,
                                    FileAccess.Write, FileShare.None))
        {
            formatter.Serialize(stream, obj);
        }
        // Deserialize the value tuple.
        using (var readStream = new FileStream("data.bin", FileMode.Open))
        {
            object restoredValue = formatter.Deserialize(readStream);
            Console.WriteLine($"{restoredValue.GetType().Name}: {restoredValue}");
        }
    }
}

标签: c#serialization.net-core

解决方案


推荐阅读