2015-02-03 3 views
1

Я хотел бы знать, если это возможно, чтобы наследовать от поля XMLElement, такие какXmlElement Наследование

public class A{ 
      [XmlElement(ElementName = "Something", Form = XmlSchemaForm.Unqualified)] 
     public string Something{ get; set; } 
} 

public class B: A 
{ 
} 

И при использовании объектов класса B, я мог иметь поле XmlElement то, что я мог управлять, делая вещи, такие как попытка разбора сделать Int32?

Спасибо

// редактирует

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

public class B: A, INotifyPropertyChanged 
{ 
     public Int32? TimerValueFromApi 
     { 
      get 
      { 
       int timerValueFromApi; 
       return int.TryParse(base.Something, out timerValueFromApi) ? (int?) timerValueFromApi : null; 

      } 
      set 
      { 
       base.Something = value.HasValue ? value.Value.ToString(CultureInfo.InvariantCulture) : "0"; 
       NotifyPropertyChanged("TimerValueFromApi"); 
      } 
     } 
} 
+0

Не могли бы вы показать, что последний бит в примере кода? –

+0

@Mark Cidade Я добавил логику, которую хотел бы сделать. –

+0

Мне сказали, что наследование будет придерживаться в любом случае. Это похоже на другое регулярное поле. Я собираюсь немного поработать позже, а затем вынести окончательный ответ на этот вопрос –

ответ

2

Да, это работает:

var xml = "<B><Something>5</Something></B>"; 
var b = (B) new XmlSerializer(typeof(B)).Deserialize(new StringReader(xml)); 
Console.WriteLine(b.TimerValueFromApi); // outputs "5" 
+0

, что-то такое полезное, что я искал. Работает очень хорошо. Вы потрясающий –

1

Вы можете использовать некоторые AfterDeserialization действия вроде этого:

public interface IDeserializable 
{ 
    void OnDeserialize(); 
} 

public class A 
{ 
    [XmlElement(ElementName = "Something", Form = XmlSchemaForm.Unqualified)] 
    public string Something { get; set; } 
} 

public class B : A, IDeserializable 
{ 
    [System.Xml.Serialization.XmlIgnore] 
    public Int32 SomethingInt32 
    { 
     get; 
     set; 
    } 

    public void OnDeserialize() 
    { 
     SomethingInt32 = Int32.Parse(Something); 
    } 
} 

public class C 
{ 
    public void Deserialize() 
    { 
     System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(typeof(B)); 
     var b = ser.Deserialize(streamOrStringData) as B; 
     b.OnDeserialize(); 
    } 
} 
+0

твоя идея тоже работает, но это немного больше кода, чем я хотел бы использовать. Но это все же приемлемый ответ! :) –

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