gpt4 book ai didi

.net - 这个不可序列化的对象在哪里?

转载 作者:行者123 更新时间:2023-12-05 00:04:48 24 4
gpt4 key购买 nike

我正在尝试序列化一个对象并抛出以下 SerializationException:

Type 'System.Linq.Enumerable+d__71`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' in Assembly 'System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable.



这个对象在我的代码中的什么地方?我怎么知道?对象图相当大。

最佳答案

听起来好像您已经存储了调用枚举器方法的结果而不将结果转换为列表。

当你有这样的方法时:

public IEnumerable<string> GetMyWidgetNames()
{
foreach (var x in MyWidgets)
{
yield return x.Name;
}
}

编译器将其转换为一个嵌套对象,其名称与您看到的名称类似(由于嵌入了 +,因此您永远无法自己创建名称)

如果您随后将对此对象的引用存储在您尝试序列化的内容中,您将收到 OP 记录的异常。

“修复”是确保您的序列化对象始终将任何 IEnumerable<> 分配转换为列表。而不是这个
public IEnumerable<string> WidgetNames { get; set; }

你需要写:
public IEnumerable<string> WidgetNames
{
get { return mWidgetNames; }
set
{
if (value == null)
mWidgetNames= null
else mWidgetNames= value.ToList();
}
}
private List<string> mWidgetNames;

关于.net - 这个不可序列化的对象在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5320212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com