2014-02-17 3 views
0

У меня XML, как показано ниже.Дессериализация пары ключевых значений в XML-объекте C#

<Device-array> 
    <Device> 
    <id>8</id> 
    <properties> 
    <PropKeyValuePair>...</PropKeyValuePair> 
    <PropKeyValuePair>...</PropKeyValuePair> 
    </properties> 
    </Device> 
    <Device>...</Device> 
    <Device>...</Device> 
</Device-array> 

Я планирую десериализовать его на объект C#, чтобы он был быстрее. Мне нужно только поле id. Но я понимаю, что класс должен иметь массив для (свойств). Но как я представляю ключевую партию ценности?

[Serializable()] 
public class SLVGeoZone 
{ 
    [XmlElement("id")] 
    public string id { get; set; } 

    //Arraylist of key value pairs here ? 

} 

потребность в предложениях.

+1

Если вам нужно только удостоверение личности, почему вы добавления keyvaluepairs к классу? Я почти уверен, что теги, которые вы не ссылаетесь, будут игнорироваться при десериализации. – Blorgbeard

ответ

1

Вы можете использовать LINQ для XML вместо десериализации и получить именно то, что вам нужно: список идентификаторов:

var xDoc = XDocument.Load("FilePath.xml"); 

var ids = xDoc.Root 
       .Elements("Device") 
       .Select(x => (int)x.Element("id")) 
       .ToList(); 

Если вам действительно нужно использовать десериализации вы можете просто опускаете свойство, которые вы не нужны, и XmlSerializer будет десериализовать только что объявленный контент, пропуская элементы, которые вы не объявили в своем классе.

Update

Чтобы получить больше, чем просто имя в список анонимного типа:

var ids = xDoc.Root 
       .Elements("Device") 
       .Select(x => new { 
        Id = (int)x.Element("id"), 
        Name = (string)x.Element("name") 
       }) 
       .ToList(); 
+0

Допустим, у меня есть массив из 500 устройств, и мне нужно только идентификаторы в каждом из них. Будет ли LINQ лучше с точки зрения производительности? – user1687824

+0

Не знаю. Вы должны это измерить. Это определенно более читаемый и простой в использовании, потому что вам не нужно объявлять, что любой класс и код действительно просты. – MarcinJuraszek

+0

ОК. Спасибо за ответ. Предположим, что есть еще один элемент «Имя». Могу ли я получить список id и соответствующее имя из запроса Linq? – user1687824

Смежные вопросы