Преобразовать тег XML в анонимный тип - PullRequest
0 голосов
/ 28 апреля 2011

Я искал для преобразования XML-файл, мне пришлось вернуть мне список анонимных типов, поэтому у меня есть что-то вроде этого:

<Input name="MyProperty" datatype="string">a</Input>
<Input name="SecondProperty" datatype="IPAddress">b</Input>
<Input name="ThirdProperty" datatype="int">c</Input>

и хотел, чтобы он был преобразован в формат, как показано ниже:

select new
       {
        MyProperty=a,  
        SecondProperty=b,
        ThridProperty=c,
       }

Возможно ли это сделать? Идея состоит в том, чтобы вернуть список этих входных данных для
другого метода.

спасибо, любая помощь приветствуется

Ответы [ 2 ]

0 голосов
/ 28 апреля 2011

Возможно, это не то решение, которое вы искали, но просто хотели пройти через это ...

Что-то, что я нашел полезным, когда сталкиваюсь с XML, это украшение класса с атрибутом Serializable ... itсделать сериализацию в и из XML на одном дыхании.http://msdn.microsoft.com/en-us/library/system.serializableattribute.aspx Вы можете дополнительно манипулировать выводом, чтобы получить нужный вам формат XML.

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

[Serializable]
public struct SerializableKeyValuePair<TKey, TValue>
{
    public TKey Key { get; set; }

    public TValue Value { get; set; }
}

[Serializable]
public class Input
{
    public List<SerializableKeyValuePair<string, string>> PropertyBag { get; set; }
}

Однако у вас не будет такого большого контроля, поскольку все свойства должны быть атрибутом ИЛИ элементом, представленным в XML.

0 голосов
/ 28 апреля 2011

Если вы заранее знаете название недвижимости, вы можете сделать это:

XElement doc = ...
var obj = new
{
    MyProperty = doc.Root.Elements("Input").First(e => e.Attribute("name") == "MyProperty").Value,
    SecondProperty = doc.Root.Elements("Input").First(e => e.Attribute("name") == "SecondProperty").Value,
    ThirdProperty = doc.Root.Elements("Input").First(e => e.Attribute("name") == "ThirdProperty").Value
}

Если вы не знаете имена, вы не можете использовать анонимный тип. Анонимные типы - это действительно нормальные типы без имени, их члены объявляются статически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...