Вот лучший способ сделать то, что вы изначально задали; то есть проверять, действительно ли определенное поле хранит значение типа массива:
.find({ "author": { "$gte": [] } })
Функциональность типа $ MongoDB для массивов, хотя и хорошо документирована, является ИМО несовместимой со всеми другими проверками типа $ и, очевидно, 't работать для этого варианта использования, но начиная примерно с 2.6 вы можете использовать указанный выше запрос, чтобы проверить, является ли это значение массивом (пустое или нет).
Я говорю, что это «лучше», чем в настоящее время выбранный ответ, потому что выполнение кода через $, где не рекомендуется, если стандартные конструкторы запроса действительно не могут выполнить задание.
Чтобы разработать, $ где не рекомендуется из-за производительности из-за отсутствия возможности использовать индексы в выполненный код. Подробнее: https://docs.mongodb.com/manual/reference/operator/query/where/#considerations
Кроме того, если вы хотите проверить, не -пустые массивы, используйте это:
.find({ "author": { "$gt": [] } })
Технически это тоже лучше, чем соответствующее решение $ exists, соответствующее текущему ответу, так как поле может иметь объект без массива с полем с именем «0 », и это будет соответствовать« непустому массиву », что в этом случае неверно.
Можно генерировать сериализуемые классы C# из схемы (xsd) использование xsd.exe:
xsd.exe dependency1.xsd dependency2.xsd schema.xsd /out:outputDir
, Если схема имеет зависимости (включал/импортировал схемы), они должны все быть включены в ту же командную строку.
Этот код (C# DotNet 1.0 вперед) работает вполне хорошо для сериализации большинства объектов к XML. (и назад), Это не работает на объекты, содержащие ArrayLists, и если возможная палка к использованию только Массивов
using System;
using System.IO;
using System.Text;
using System.Xml.Serialization;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
public static string Serialize(object objectToSerialize)
{
MemoryStream mem = new MemoryStream();
XmlSerializer ser = new XmlSerializer(objectToSerialize.GetType());
ser.Serialize(mem, objectToSerialize);
ASCIIEncoding ascii = new ASCIIEncoding();
return ascii.GetString(mem.ToArray());
}
public static object Deserialize(Type typeToDeserialize, string xmlString)
{
byte[] bytes = Encoding.UTF8.GetBytes(xmlString);
MemoryStream mem = new MemoryStream(bytes);
XmlSerializer ser = new XmlSerializer(typeToDeserialize);
return ser.Deserialize(mem);
}
Используйте программу командной строки xsd.exe, которая идет с Visual Studio для создания файлов класса, которые можно использовать в проекте/решении и Системе. Xml. Пространство имен сериализации (а именно, класс XmlSerializer) к serialize/deserialze те классы к и от диска.
LINQ к XML очень мощен при использовании .net 3.5, , LINQ к XSD может быть полезен для Вас также!
использование Системы. Xml. Сериализация; это пространство имен имеет все атрибуты, в которых Вы будете нуждаться, если Вы захотите отобразить свой xml на какой-либо случайный объект. Кроме того, можно использовать инструмент xsd.exe
xsd file.xsd {/классы | / набор данных} [/element:element] [/language:language] [/namespace:namespace] [/outputdir:directory] [URI:uri], который возьмет xsd файлы и создаст c# или классы vb.net из них.
http://msdn.microsoft.com/en-us/library/x6c1kb0s (По сравнению с 71) .aspx
Я буду держать пари, что NetDataContractSerializer может сделать то, что Вы хотите.