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

.net 这个不可序列化的对象在哪里?,.net,serialization,.net-4.0,serializable,binary-serialization,.net,Serialization,.net 4.0,Serializable,Binary Serialization,我正在尝试序列化对象,并引发以下SerializationException: 在程序集“System.Core,Version=4.0.0.0,Culture=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”中键入“System.Linq.Enumerable+d_u71`1[[System.String,mscorlib,Version=4.0.0.0,Culture=neutral,Culture=b77a5c561934e0

我正在尝试序列化对象,并引发以下SerializationException:

在程序集“System.Core,Version=4.0.0.0,Culture=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”中键入“System.Linq.Enumerable+d_u71`1[[System.String,mscorlib,Version=4.0.0.0,Culture=neutral,Culture=b77a5c561934e089]”未标记为可序列化


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

尝试使用Reflector,看看是否可以确定匿名类型
d_u71`1
在代码中的使用位置。

尝试一次序列化一个对象(单一类型),看看它何时爆炸。您可以手动执行此操作,也可以通过反射执行此操作。

听起来好像您存储了调用枚举器方法的结果,而没有将结果转换为列表

当您有这样一种方法时:

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

public IEnumerable<string> WidgetNames
{
    get { return mWidgetNames; }
    set
    {
        if (value == null)
            mWidgetNames= null
        else mWidgetNames= value.ToList();
    }
}
private List<string> mWidgetNames;
public IEnumerable WidgetNames
{
获取{return mWidgetNames;}
设置
{
如果(值==null)
mWidgetNames=null
else mWidgetNames=value.ToList();
}
}
私有列表mWidgetNames;

它只是用于序列化的堆栈…与无法序列化的对象无关+1,System.Linq.Enumerable。。。表示此数据集是从Linq查询返回的。尽管它实现了IEnumerable,但它不可序列化。通常,您需要对这个Linq结果调用ToList()或ToArray(),然后它就可以被序列化了。这很有帮助。我希望如此,让我分开回答。你的回答和马克·赫德的帮助我找到了问题所在。事实上,它是一个IEnumerable,已经连接在一起,需要扁平化为一个列表。我掷硬币给谁奖励答案。谢谢!我甚至没有想到在reflector中加载我的dll。一旦我这样做了,就很容易找到d_u71'1并分析它的用法。谢谢那么,为什么要投否决票?这正是我解决问题的方法(我有一种很好的感觉,它会起作用)。
public IEnumerable<string> WidgetNames
{
    get { return mWidgetNames; }
    set
    {
        if (value == null)
            mWidgetNames= null
        else mWidgetNames= value.ToList();
    }
}
private List<string> mWidgetNames;