Самый эффективный способ проанализировать Xml

Формат "hotels": { "hotel_id": 9036, "name": "My Hotel Name", ... },.. недопустим, но вы можете сделать его массивом "hotels": [ { "hotel_id": 9036, "name": "My Hotel Name", ... } ].

Вы можете сделать это, пометив свой словарь с помощью JsonIgnore и выставив коллекцию отелей, которая содержит значения из словаря отелей.

Например,

var hotel = new Results
{
    id= "d875e165-4705-459e-8532-fca2ae811ae0",
    HotelDictionary = new Dictionary<int,Hotels> {
    [2323]=new Hotels{Id=2323,Name="Sample1"},
    [1323]=new Hotels{Id=1323,Name="Sample2"},
    }
};
var jsonString = JsonConvert.SerializeObject(hotel,Newtonsoft.Json.Formatting.Indented);

Где Results and Hotels определены как (обратите внимание, я игнорировал другие свойства, чтобы сосредоточиться на словаре, но вы можете добавить их в качестве окончательного решения).

public class Results
{

    public string id { get; set; }
    [JsonIgnore]
    public Dictionary<int,Hotels> HotelDictionary { get; set; }
    [JsonProperty("hotels")]
    public IEnumerable<Hotels> Hotels => HotelDictionary.Select(x=>x.Value);
}

public class Hotels
{
    [JsonProperty("hotel_id")]
    public int Id{get;set;}
    [JsonProperty("name")]
    public string Name{get;set;}
}

Выход

{
  "id": "d875e165-4705-459e-8532-fca2ae811ae0",
  "hotels": [
    {
      "hotel_id": 2323,
      "name": "Sample1"
    },
    {
      "hotel_id": 1323,
      "name": "Sample2"
    }
  ]
}
17
задан Jeff Mercado 7 October 2011 в 22:49
поделиться

3 ответа

Три наиболее распространенных метода для чтения:

XmlDocument Это читает целый файл в древовидной структуре, к которой можно тогда получить доступ с помощью XPath или путем просмотра всех узлов. Требуется большая память для очень большого файла, так как целая структура XML должна быть загружена в памяти. Очень хороший и простой использовать для меньших файлов (менее тогда несколько megs).

XmlReader Быстро, но также и реальная боль для использования, так как это последовательно. Если когда-нибудь необходимо возвращаться, Вы не можете, и структура XML обычно очень подвержена тому, что дезорганизовала заказы. Кроме того, если Вы читаете из не конечного потока XML, это - вероятно, единственный способ пойти.

сериализаторы XML Это в основном делает все для Вас, Вы обеспечиваете корневой объект своей модели, и это создает, и считайте XML для Вас. Однако Вы не имеете почти никакого контроля структурой, и чтение более старых версий Вашего объекта является болью. Таким образом, это не будет работать очень хорошо на постоянство.

XDocument и LINQ к XML, Поскольку Daniel Straight указал. Но я не знаю, что это достаточно комментирует. Я приглашаю любого редактировать сообщение и добавлять недостающую информацию

<час>

, Теперь запись является другой историей. Это - боль для поддержания XmlDocument, и XmlWriter является бризом для использования.

я сказал бы, на основе моего опыта, что лучшая комбинация должна записать использованию XmlWriter и считать использование XmlDocument.

13
ответ дан 30 November 2019 в 13:34
поделиться

Существует также XDocument и LINQ к XML, который я рассматриваю безусловно самым эффективным когда дело доходит до времени программиста.

5
ответ дан 30 November 2019 в 13:34
поделиться

Самый быстрый был бы XmlTextReader. Из MSDN:

"Представляет читателя, который обеспечивает быстро, некэшируемый, передайте только доступ к данным XML".

Больше здесь: Класс

XmlTextReader, Хотя это действительно зависит от проблемы для решения, какой "метод" наиболее подходил бы для использования. Если необходимо считать XML-файл только однажды (например: чтение и кэширование некоторых глобальных настроек приложения, и т.д.), тогда XmlTextReader является победителем. Но помните, это - forward-only-reader. Если необходимо искать/изменять со всех сторон XML, то необходимо, вероятно, использовать Класс .

XmlDocument
4
ответ дан 30 November 2019 в 13:34
поделиться
Другие вопросы по тегам:

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