Я сделал несколько поисковых запросов Google, но все еще ничего не мог найти. Очень легко установить пользовательский сериализатор, но как обрабатывать десериализацию только одного свойства класса?MongoDB: можно обрабатывать собственный десериализатор только для одного свойства?
2
A
ответ
2
Вы можете достичь этого, используя проекции, вот Slazure пример:
Во-первых, необходимо установить пакет Slazure NuGet:
PM> Install-Package Slazure.MongoDB
Затем запустите следующий C пример # кода в Visual Studio:
using System;
using System.Linq;
using MongoDB.Bson;
using SysSurge.Slazure.Core.Linq.QueryParser;
using SysSurge.Slazure.MongoDB;
using SysSurge.Slazure.MongoDB.Linq;
namespace ProjectionJsonExample
{
class Program
{
static void CreateDocument()
{
// Create a MongoDB document.
dynamic storage = new DynStorage("mongodb://localhost/ConsoleExample");
// Get reference to the Employees document collection - it's created if it doesn't already exist
dynamic employeesCollection = storage.EmployeesColl;
// Create a document in the Employees collection for John with his email as the document id - the document is created if it doesn't already exist
var employee = employeesCollection.Document("[email protected]");
employee.Name = "John Doe";
employee.Salary = 50000; // John earns $50k/year
employee.Birthdate = new DateTime(1995, 8, 18); // John was born 08/18/1995
// Save the document to the MongoDB database
employee.Save();
}
static DynDocument QueryDocument()
{
// Build a document query that return employees that has a salary greater than $40k/year using a dynamic LINQ query filter.
dynamic storage = new QueryableStorage<DynDocument>("mongodb://localhost/ConsoleExample");
QueryableCollection<DynDocument> employeesCollection = storage.EmployeesColl;
var employeeQuery = employeesCollection
// Query for salary greater than $40k and born later than early '95.
.Where("Salary > 40000 and Birthdate > DateTime(1995, 1, 1)")
// Projection makes sure that we only return Birthdate and no other properties.
.Select("new(Birthdate)");
// Execute the query and return the first document
return employeeQuery.Cast<DynDocument>().First();
}
static void DeleteCollection()
{
dynamic storage = new DynStorage("mongodb://localhost/ConsoleExample");
// Delete EmployeesColl collection if it exists to make sure we start with fresh data
storage.Delete("EmployeesColl");
}
static void Main(string[] args)
{
// Delete EmployeesColl collection if it exists to make sure we start with fresh data
DeleteCollection();
// Add a employee document to the MongoDB database
CreateDocument();
// Get employee
var employee = QueryDocument();
var json = employee.GetBsonDocument().ToJson();
Console.WriteLine(json);
Console.WriteLine("Press a key to continue...");
Console.ReadKey();
}
}
}
Результатом работы этого крошечного примера является следующее:
{ "_id" : "79868b41-17d5-4737-b99d-c92e492bb502", "Birthdate" : ISODate("1995-08-17T22.00.00Z") }
Press a key to continue...
Как вы можете видеть выше, даже если документ, который мы создали имел Имя и зарплаты имущества они не были получены с сервера MongoDB из-за проекции, что мы указали с Select("new(Birthdate)")
в нашем коде.
Смежные вопросы
- 1. Использовать собственный десериализатор только для определенных полей?
- 2. Пользовательские Джексон десериализатор обрабатывать свойства любого боба
- 3. Как написать собственный сериализатор/десериализатор?
- 4. Как написать собственный десериализатор JSON для Gson?
- 5. Как создать собственный десериализатор списка в Gson?
- 6. Пользовательский десериализатор для RealmObject
- 7. Может ли protobuf-net обрабатывать свойства только для чтения?
- 8. Возможно ли обработать привязку только для одного конкретного свойства?
- 9. Json.net десериализатор игнорирует ненулевые свойства ссылочного типа
- 10. Пользовательский полевой сериализатор/десериализатор
- 11. Как можно обрабатывать неопределенное свойство неопределенной ошибки javascript типа свойства?
- 12. Jackson - Используйте специальный десериализатор только для конкретного JSON
- 13. Knockout.js - установить insertMessages в false только для одного свойства viewmodel
- 14. Silverlight: DataContractSerializer не может обрабатывать свойства коллекции только для чтения
- 15. Пользовательский десериализатор Gson для общих типов
- 16. сериализации получить свойства только на MongoDb
- 17. Ошибка Gson + AutoValue при попытке реализовать собственный десериализатор
- 18. Как можно настроить десериализатор XML для получения атрибута?
- 19. grails: выборочная проверка только одного поля/свойства
- 20. Указать пользовательские десериализации для одного класса внутри структуры данных и оставить остальной десериализатор по умолчанию
- 21. documentdb индексирование для одного свойства
- 22. Выявление только одного значения свойства из кода
- 23. Spring @RequestMapping десериализатор
- 24. Можно ли сравнить только время в mongodb?
- 25. Можно ли только заполнить определенные поля MongoDB
- 26. Пользовательский десериализатор Jackson для сторонней библиотеки
- 27. Xml десериализатор не работает
- 28. MongoDB: используйте MongoImport с csv для обновления только одного поля
- 29. Общий встроенный EventArgs для хранения только одного свойства?
- 30. Запрос на получение информации не подходит только для одного свойства
http://stackoverflow.com/questions/19307752/deserializing-polymorphic-json-classes-without-type-information-using-json-net –