Nano Hash - криптовалюты, майнинг, программирование

Сериализовать результаты Linq напрямую в JSON

Я разрабатываю WebService, который исключает linq для sql db и помещает результаты в переменную VAR. Затем я хочу сериализовать результат внутри VAR в формат json с помощью сериализатора javascript (С #). Что-то вроде этого:

var sb= from p in ent.people .........
System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new       System.Runtime.Serialization.Json.DataContractJsonSerializer(sb.GetType());
MemoryStream ms = new MemoryStream();
serializer.WriteObject(ms, sb);
string json = System.Text.Encoding.Default.GetString(ms.ToArray());

НО Я ПОЛУЧАЮ ОТВЕТ ОБ ОШИБКЕ, ТАК КАК ЭТО:

Type      'System.Data.Objects.ObjectQuery`1[<>f__AnonymousType2d`5[System.String,System.Nu llable`1[System.Int32],System.Nullable`1[System.Int32],System.Int32,System.String]]' cannot be serialized. 

Подумайте о том, чтобы пометить его атрибутом DataContractAttribute и пометить все его члены, которые вы хотите сериализовать, с помощью атрибута DataMemberAttribute. Если тип является коллекцией, подумайте о том, чтобы пометить его атрибутом CollectionDataContractAttribute. Информацию о других поддерживаемых типах см. В документации Microsoft .NET Framework.

КАК Я МОГУ СЕРИАЛИЗИРОВАТЬ РЕЗУЛЬТАТЫ LINQ НЕПОСРЕДСТВЕННО В JSON? Большое спасибо за все ответы! Энрико


Ответы:


1

DataContractJsonSerializer не поддерживает анонимные объекты. Если вы хотите сериализовать анонимные объекты, вы можете использовать Класс JavaScriptSerializer:

var sb = from p in ent.people .........
var serializer = new JavaScriptSerializer();
string json = serializer.Serialize(sb);
18.10.2011
  • Я отчетливо помню команду, над которой я работал, решая эту проблему с помощью сериализаторов DataContract. У нас был код веб-уровня, который осуществлял обратный вызов в репозиторий на другом сервере через службу WCF, и, хотя существовали некоторые ограничения на то, что запрос может быть и что делать, он работал. 18.10.2011

  • 2

    вы можете использовать для этого Newtonsoft.JSON

    вот синтаксис

    var sb = from p in ent.people .........
    string json = JsonConvert.SerializeObject(sb);
    
    06.07.2018

    3

    На моей последней работе мы видели такое поведение, и потребовалось немного усилий, чтобы его обойти.

    Во-первых, вам нужен набор инструментов IQ, доступный на CodePlex бесплатно. В его библиотеках есть «PartialEvaluator», который может уменьшить сложность многих деревьев выражений, находя узлы, которые всегда оцениваются как более простые узлы, и заменяя ссылки на «внешние замыкания» константами. Вы захотите запустить свой IQueryable через это, прежде чем пытаться сериализовать его.

    Затем, чтобы использовать сериализатор JSON DataContract, вы должны настроить класс, который вы хотите сериализовать, как DataContract. Повсюду есть учебники для этого; в основном вы просто украшаете класс, любые содержащиеся в нем классы и члены, которые хотите сериализовать, с атрибутами.

    Когда у вас есть эти две вещи, ваш объект и его член IQueryable должны быть сериализованы в JSON с помощью DataContractJsonSerializer.

    18.10.2011
  • Итак, если я понимаю, что должен загрузить набор инструментов iq (я полагаю, это dll), а затем я передаю свои результаты linq вызывающему методу частичного оценщика, и после того, как я могу сериализовать обработанный результат с помощью dataContractJsonSerializer? 19.10.2011
  • Еще один шаг; вам необходимо правильно настроить класс, который вы хотите сериализовать как DataContract, украсив класс и его члены атрибутами. 19.10.2011
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..