Вопрос

Я пытаюсь сериализовать объект, и выбрасывается следующая сериализация Exception:

Type 'System.Linq.Enumerable+D__71`1 [[[System.String, MSCORLIB, версия = 4.0.0.0, культура = нейтральный, publicKeyToken = b77a5c561934e089]]' в сборке 'System.core, версия = 4.0.0, культура = Нейтральный, publickeyToken = b77a5c561934e089 'не отмечен как сериализуемый.

Где этот объект в моем коде? Как я узнаю? График объекта довольно большой.

Это было полезно?

Решение

Попробуйте использовать отражатель и посмотреть, сможете ли вы определить, где анонимный тип d__71`1 используется в вашем коде.

Другие советы

Мне кажется, что вы сохранили результаты вызова метода перечисления без преобразования результата в список.

Когда у вас есть такой метод, как это:

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;

Попробуйте сериализовать объект (один тип) за раз и посмотрите, когда он взорвется. Вы можете сделать это вручную или через размышления.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top