هل يمكنني إضافة سمات إلى خاصية كائن في وقت التشغيل؟
-
03-07-2019 - |
سؤال
على سبيل المثال، أريد إزالة أو تغيير سمات الخاصية أدناه أو إضافة سمات جديدة.هل هو ممكن؟
[XmlElement("bill_info")]
[XmlIgnore]
public BillInfo BillInfo
{
get { return billInfo; }
set { billInfo = value; }
}
المحلول
و(تحرير - أنا أخطأت السؤال الأصلي)
ولا يمكنك إضافة سمات الفعلية (وفيحترق إلى IL)؛ ومع ذلك، مع XmlSerializer
لم يكن لديك ل- يمكنك تزويد سمات إضافية في منشئ إلى XmlSerializer
. قمت بذلك، ومع ذلك، تحتاج إلى أن يكون حذرا قليلا إلى ذاكرة التخزين المؤقت المثال XmlSerializer
إذا قمت بذلك، وإلا فإنه سيتم إنشاء تجميع إضافي لكل مثيل، وهو راشح قليلا. (لا تفعل هذا إذا كنت تستخدم منشئ بسيط هو أن يستغرق سوى Type
). انظروا XmlAttributeOverrides
.
لمثال:
using System;
using System.Xml.Serialization;
public class Person
{
static void Main()
{
XmlAttributeOverrides overrides = new XmlAttributeOverrides();
XmlAttributes attribs = new XmlAttributes();
attribs.XmlIgnore = false;
attribs.XmlElements.Add(new XmlElementAttribute("personName"));
overrides.Add(typeof(Person), "Name", attribs);
XmlSerializer ser = new XmlSerializer(typeof(Person), overrides);
Person person = new Person();
person.Name = "Marc";
ser.Serialize(Console.Out, person);
}
private string name;
[XmlElement("name")]
[XmlIgnore]
public string Name { get { return name; } set { name = value; } }
}
ملحوظة أيضا. إذا كانت سمات أكس مجرد التوضيح، ثم هناك <م> الثانية م> طريقة لإضافة سمات الأشياء التي تتعلق البيانات ملزم، وذلك باستخدام TypeDescriptor.CreateProperty
وإما ICustomTypeDescriptor
أو TypeDescriptionProvider
. كثيرا أكثر تعقيدا مما كان عليه الحال أكس، وأخشى - ولا يعمل لكافة التعليمات البرمجية - مجرد رمز يستخدم المكون من طراز
نصائح أخرى
ليس من الممكن إضافة/إزالة السمات من فئة في وقت التشغيل.
ومع ذلك، من الممكن تحديث الطريقة التي يعمل بها تسلسل XML في وقت التشغيل دون الحاجة إلى تعديل السمات.انظر مشاركة مارك.
يحرر محدث