Я пытаюсь использовать следующий код для сериализации анонимного типа в JSON:
var serializer = new DataContractJsonSerializer(thing.GetType());
var ms = new MemoryStream();
serializer.WriteObject(ms, thing);
var json = Encoding.Default.GetString(ms.ToArray());
Тем не менее, я получаю следующее исключение, когда это выполняется:
Тип '<> f__AnonymousType1`3 [System.Int32, System.Int32, System.Object []]' не может быть сериализован. Попробуйте пометить его атрибутом DataContractAttribute, а все его элементы, которые вы хотите сериализовать, помечайте атрибутом DataMemberAttribute. См. Документацию Microsoft .NET Framework для других поддерживаемых типов.
Я не могу применить атрибуты к анонимному типу (насколько я знаю). Есть ли другой способ сделать эту сериализацию или я что-то упустил?
System.Web.Extensions.dll
и добавитьusing System.Web.Script.Serialization;
заявление.Как уже упоминалось, Newtonsoft JSON.NET - хороший вариант. Вот конкретный пример простой сериализации JSON:
Я обнаружил, что это очень гибкая, универсальная библиотека.
источник
Вы можете попробовать мой ServiceStack JsonSerializer, это самый быстрый сериализатор .NET JSON на данный момент. Он поддерживает сериализацию DataContract, любого типа POCO, интерфейсов, объектов с поздним связыванием, включая анонимные типы и т. Д.
Основной пример
Примечание: используйте Microsoftsofts JavaScriptSerializer только в том случае, если производительность не важна для вас, так как мне пришлось исключить ее из своих тестов, поскольку она в 40–100 раз медленнее, чем другие сериализаторы JSON.
источник
Обратите внимание, что это с 2008 года. Сегодня я бы сказал, что сериализатор должен быть встроен и что вы, вероятно, можете использовать атрибуты swagger +, чтобы информировать потребителей о вашей конечной точке и возвращать данные.
Я бы сказал, что вы не должны сериализовать анонимный тип . Я знаю искушение здесь; Вы хотите быстро сгенерировать несколько одноразовых типов, которые просто будут использоваться в среде со свободными типами, которая называется Javascript в браузере. Тем не менее, я бы создал реальный тип и украсил бы его как Serializable. Тогда вы можете строго ввести свои веб-методы. Хотя это не имеет значения ни на йоту для Javascript, оно добавляет некоторую самодокументированность к методу. Любой опытный программист сможет взглянуть на сигнатуру функции и сказать: «О, это тип Foo! Я знаю, как это должно выглядеть в JSON».
Сказав это, вы можете попробовать JSON.Net для сериализации. Я понятия не имею, будет ли это работать
источник
Самый быстрый способ, который я нашел, был таким:
Пространство имен: System.Web.Script.Serialization.JavaScriptSerializer
источник
Вы можете использовать Newtonsoft.Json.
источник
Предполагая, что вы используете это для веб-службы, вы можете просто применить следующий атрибут к классу:
Затем следующий атрибут для каждого метода, который должен возвращать Json:
И установите тип возвращаемого значения для методов, чтобы быть "объектом"
источник
источник