Вы можете перебирать свойства объекта посредством отражения, сравнивать его свойства со «свежим» экземпляром и записывать разницу как-то. Но вы должны решить многие проблемы, если вы выбираете этот путь, как null
обработки, сериализации несериализуемых типов, сериализация ссылки и т.д. Вот только эскиз:
public static string ChangedPropertiesToXml<T>(T changedObj)
{
XmlDocument doc=new XmlDocument();
XmlNode typeNode = doc.CreateNode(XmlNodeType.Element, typeof (T).Name, "");
doc.AppendChild(typeNode);
T templateObj = Activator.CreateInstance<T>();
foreach (PropertyInfo info in
typeof (T).GetProperties(BindingFlags.Instance | BindingFlags.Public))
{
if (info.CanRead && info.CanWrite)
{
object templateValue = info.GetValue(templateObj, null);
object changedValue = info.GetValue(changedObj, null);
if (templateValue != null && changedValue != null && !templateValue.Equals(changedValue))
{
XmlElement elem = doc.CreateElement(info.Name);
elem.InnerText = changedValue.ToString();
typeNode.AppendChild(elem);
}
}
}
StringWriter sw=new StringWriter();
doc.WriteContentTo(new XmlTextWriter(sw));
return sw.ToString();
}
Вызов:
Button b = new Button();
b.Name = "ChangedName";
Console.WriteLine(SaveChangedProperties(b));
выход:
<Button>
<Name>ChangedName</Name>
</Button>
_объект только с измененными свойствами_ - непонятно, чего вы ожидаете. можете ли вы добавить пример кода? –
Как вы узнали, какие свойства * * изменены? – nvoigt
Короткий ответ - нет, но посмотрите http://stackoverflow.com/questions/9377414/excluding-some-properties-during-serialization-without-changing-the-original-cla –