Установить атрибут @ время выполнения - PullRequest
0 голосов
/ 10 марта 2010

У меня есть класс со свойством в нем. Я хочу знать, можем ли мы установить атрибут, такой как XmlAttributeAttribute.AttributeName.

Здесь атрибут ElementName устанавливается во время компиляции, я хочу знать, можем ли мы установить @ run time.

public class MyTestClass
{
    [XmlElement(ElementName = "MyAttributeName")]
    public int MyAttribute
    {
        get
        {
            return 23;
        }
    }
}

Ответы [ 2 ]

4 голосов
/ 10 марта 2010

Вы ищете XmlAttributeOverrides .

  XmlAttributeOverrides attOv = new XmlAttributeOverrides();
  XmlAttributes attrs = new XmlAttributes();
  attrs.XmlElements.Add(new XmlElementAttribute("MyAttributeName"));
  attOv.Add(typeof(MyTestClass), "MyAttribute", attrs);
  XmlSerializer serializer = new XmlSerializer(typeof(MyTestClass), attOv);
  //...
0 голосов
/ 10 марта 2010

Вам потребуется реализовать интерфейс ISerializable и переопределить следующие функции, в которых вы можете устанавливать атрибуты во время выполнения (из списка или любым другим способом, который вам может потребоваться)

public Employee(SerializationInfo info, StreamingContext ctxt)
{
    //Get the values from info and assign them to the appropriate properties

    EmpId = (int)info.GetValue("EmployeeId", typeof(int));
    EmpName = (String)info.GetValue("EmployeeName", typeof(string));
}

//Serialization function.

public void GetObjectData(SerializationInfo info, StreamingContext ctxt)
{
    //You can use any custom name for your name-value pair. But make sure you

    // read the values with the same name. For ex:- If you write EmpId as "EmployeeId"

    // then you should read the same with "EmployeeId"

    info.AddValue("EmployeeId", EmpId);
    info.AddValue("EmployeeName", EmpName);
}

Взгляните на CodeProject

...