我正在尝试序列化一个对象并引发以下 SerializationException:
在程序集 'System.Core, Version=4.0.0.0, Culture=中性,PublicKeyToken=b77a5c561934e089' 未标记为可序列化。
我的代码中的这个对象在哪里?我怎么知道?对象图相当大。
我正在尝试序列化一个对象并引发以下 SerializationException:
在程序集 'System.Core, Version=4.0.0.0, Culture=中性,PublicKeyToken=b77a5c561934e089' 未标记为可序列化。
我的代码中的这个对象在哪里?我怎么知道?对象图相当大。
听起来好像您已经存储了调用枚举器方法的结果,而没有将结果转换为列表。
当你有这样的方法时:
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;
尝试使用 Reflector 并查看是否可以确定匿名类型d__71`1
在代码中的使用位置。
尝试一次序列化一个对象(单一类型),看看它什么时候爆炸。您可以手动执行此操作,也可以通过反射执行此操作。