Как я отображаю XML на объекты C#

Вот лучший способ сделать то, что вы изначально задали; то есть проверять, действительно ли определенное поле хранит значение типа массива:

.find({ "author": { "$gte": [] } })

Функциональность типа $ MongoDB для массивов, хотя и хорошо документирована, является ИМО несовместимой со всеми другими проверками типа $ и, очевидно, 't работать для этого варианта использования, но начиная примерно с 2.6 вы можете использовать указанный выше запрос, чтобы проверить, является ли это значение массивом (пустое или нет).

Я говорю, что это «лучше», чем в настоящее время выбранный ответ, потому что выполнение кода через $, где не рекомендуется, если стандартные конструкторы запроса действительно не могут выполнить задание.

Чтобы разработать, $ где не рекомендуется из-за производительности из-за отсутствия возможности использовать индексы в выполненный код. Подробнее: https://docs.mongodb.com/manual/reference/operator/query/where/#considerations

Кроме того, если вы хотите проверить, не -пустые массивы, используйте это:

.find({ "author": { "$gt": [] } })

Технически это тоже лучше, чем соответствующее решение $ exists, соответствующее текущему ответу, так как поле может иметь объект без массива с полем с именем «0 », и это будет соответствовать« непустому массиву », что в этом случае неверно.

28
задан Chris 26 September 2008 в 19:11
поделиться

6 ответов

Можно генерировать сериализуемые классы C# из схемы (xsd) использование xsd.exe:

xsd.exe dependency1.xsd dependency2.xsd schema.xsd /out:outputDir

, Если схема имеет зависимости (включал/импортировал схемы), они должны все быть включены в ту же командную строку.

28
ответ дан ckarras 14 October 2019 в 10:36
поделиться

Этот код (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);
}
18
ответ дан Shimmy 14 October 2019 в 10:36
поделиться

Используйте программу командной строки xsd.exe, которая идет с Visual Studio для создания файлов класса, которые можно использовать в проекте/решении и Системе. Xml. Пространство имен сериализации (а именно, класс XmlSerializer) к serialize/deserialze те классы к и от диска.

2
ответ дан Joel Coehoorn 14 October 2019 в 10:36
поделиться

LINQ к XML очень мощен при использовании .net 3.5, , LINQ к XSD может быть полезен для Вас также!

7
ответ дан ljs 14 October 2019 в 10:36
поделиться

использование Системы. 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

2
ответ дан 14 October 2019 в 10:36
поделиться

Я буду держать пари, что NetDataContractSerializer может сделать то, что Вы хотите.

0
ответ дан dcstraw 14 October 2019 в 10:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: