2014-10-06 2 views
1

У меня проблема с моим XmlSerializer. Я пытаюсь десериализации этот файл:XmlSerializer десериализует атрибут пустых элементов

<MyClass Id="12"> 
    <ProblemHere Value="8"/> 
    <OtherElement>0</OtherElement> 
    <fdp>NTM</fdp> 
</MyClass> 

в этом классе:

[XmlType(TypeName = "MyClass")] 
public class MyClass 
{ 
    [XmlAttribute(AttributeName = "Id")] 
    public int Id { get; set; } 

    //Here I try somes head but it's a failure 
    public int ProblemHere { get; set; } 

    public int OtherElement{ get; set; } 

    public string fdp{get; set} 
} 

Как вы можете понять, что я хочу, чтобы установить ProblemHere своему значению (8 здесь). Есть ли какой-нибудь простой способ сделать это или мне нужно создать класс ProblemHere с свойством int Value (кажется, это слишком много для меня)?

+0

Другой вариант - выполнить сериализацию вручную. – juharr

ответ

1

Насколько я знаю, вы должны создать отдельный класс. Свойство называется «ProblemHere», но вы хотите, чтобы атрибут был назван «value» - я не знаю никаких атрибутов в .Net, которые могут это сделать.

Обычно я предпочитаю визуальную студию генерировать базовый XSD (который я могу настроить позже), а затем использовать xsd.exe для создания набора классов (сериализации) для него.

0

вы могли бы сделать что-то вроде этого

private int _problem = 0; 
public int ProblemHere { get {return _problem; } set { _problem = value; } } 

не красивая, но работает

+1

Это не принесет ничего полезного; который просто заменяет автоматически реализованное свойство с помощью свойства, реализованного вручную; 'XmlSerializer' будет обрабатывать его одинаково. –

1

Да, вы должны создать класс для представления этого АСПЭК данных, т.е.

public class Foo { 
    [XmlAttribute] 
    public int Value {get;set;} 
} 

public Foo ProblemHere { get; set; } 

Это это единственный способ, которым XmlSerializer будет работать со структурой, которую вы хотите.

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