Формат "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"
}
]
}
Три наиболее распространенных метода для чтения:
XmlDocument Это читает целый файл в древовидной структуре, к которой можно тогда получить доступ с помощью XPath или путем просмотра всех узлов. Требуется большая память для очень большого файла, так как целая структура XML должна быть загружена в памяти. Очень хороший и простой использовать для меньших файлов (менее тогда несколько megs).
XmlReader Быстро, но также и реальная боль для использования, так как это последовательно. Если когда-нибудь необходимо возвращаться, Вы не можете, и структура XML обычно очень подвержена тому, что дезорганизовала заказы. Кроме того, если Вы читаете из не конечного потока XML, это - вероятно, единственный способ пойти.
сериализаторы XML Это в основном делает все для Вас, Вы обеспечиваете корневой объект своей модели, и это создает, и считайте XML для Вас. Однако Вы не имеете почти никакого контроля структурой, и чтение более старых версий Вашего объекта является болью. Таким образом, это не будет работать очень хорошо на постоянство.
XDocument и LINQ к XML, Поскольку Daniel Straight указал. Но я не знаю, что это достаточно комментирует. Я приглашаю любого редактировать сообщение и добавлять недостающую информацию
<час>, Теперь запись является другой историей. Это - боль для поддержания XmlDocument, и XmlWriter является бризом для использования.
я сказал бы, на основе моего опыта, что лучшая комбинация должна записать использованию XmlWriter и считать использование XmlDocument.
Существует также XDocument и LINQ к XML, который я рассматриваю безусловно самым эффективным когда дело доходит до времени программиста.
Самый быстрый был бы XmlTextReader
. Из MSDN:
"Представляет читателя, который обеспечивает быстро, некэшируемый, передайте только доступ к данным XML".
Больше здесь: Класс
XmlTextReader, Хотя это действительно зависит от проблемы для решения, какой "метод" наиболее подходил бы для использования. Если необходимо считать XML-файл только однажды (например: чтение и кэширование некоторых глобальных настроек приложения, и т.д.), тогда XmlTextReader является победителем. Но помните, это - forward-only-reader. Если необходимо искать/изменять со всех сторон XML, то необходимо, вероятно, использовать Класс .
XmlDocument