Сериализация JSON.NET ведет себя по-разному в ApiController

Мы используем JSON.NET для сериализации пользовательских объектов. Я написал модульный тест, который успешно выполняет сериализацию JSON нашего пользовательского объекта:

// Generate custom object...
var settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto }; // Serializing objects referred to by abstract type, see comment at http://www.tomdupont.net/2014/04/deserialize-abstract-classes-with.html
var json = JsonConvert.SerializeObject(object, settings);
// ...Deserialize object and compare are equal

Однако в нашем APIController, который обрабатывает HTTP-запросы и имеет такие методы:

[HttpPost]
public ActionResult ProfileFile()
{
    // Code to handle HTTP request
}

выполнение той же операции сериализации над пользовательским объектом, сгенерированным таким же образом, дает поток System.InvalidCastException для настраиваемых объектов внутри настраиваемого объекта, который сериализуется (все они были помечены атрибутами JSON.NET и имеют свои собственные проходящие модульные тесты).

Что могло бы заставить его вести себя по-другому в нашем веб-проекте, пока он работает в модульных тестах? Заранее спасибо.

1 ответ

Не зная точного содержания объекта, который вы пытаетесь сериализовать, трудно найти точное решение. Однако, если бы я был в вашей ситуации, я бы создал элементарный класс, представляющий ваш пользовательский объект, и попытался бы его сериализовать. Если вы продолжаете видеть эту ошибку, я бы начал добавлять атрибут JsonIgnore к различным свойствам класса, чтобы увидеть, какое свойство фактически вызывает эту ошибку. Это поможет вам сузить проблему.

Другие вопросы по тегам