我刚刚开始使用C#并了解了.NET框架的优秀XmlSerializer。
我已经注释了这样一个类:
[XmlRoot("time_entry")]
public class TimeEntry
{
[XmlElement("id")]
public int Id { get; set; }
[XmlElement("project"), XmlAttribute("id")]
public int ProjectId { get; set; }
[....]
}
我已经可以使用以下方法进行基本的反序列化:
XmlSerializer s = new XmlSerializer(T);
s.Deserialize(response.GetResponseStream());
其中T是泛型类型。我现在的目标是更进一步,并给出这个XML:
<time_entries type="array" limit="25" offset="0" total_count="254">
<time_entry>
<id>299</id>
<project id="152" name="Test"/>
<issue id="1314"/>
<user id="2" name="Anonymous"/>
<activity id="9" name="Development"/>
<hours>10.0</hours>
<comments/>
<spent_on>2015-11-09</spent_on>
<created_on>2015-11-10T17:31:57Z</created_on>
<updated_on>2015-11-10T17:31:57Z</updated_on>
</time_entry>
</time_entries>
在现有字典中自动查找具有给定ID的项目,而不是在ProjectId
类上设置TimeEntry
属性,我将其替换为{{1}的实例我发现在Project
XML元素上使用id
属性。
这有可能吗?我想也许可以在getter中立即做一些事情,但是一旦字段的类型发生变化,似乎<project>
元素就会被跳过
PS:我并不真正关心序列化过程,所以这些类不会被序列化回Xml ...
答案 0 :(得分:0)
尝试在TimeEntry上实现IXmlSerializable以完全控制对象的反序列化方式。在反序列化期间,您可以分配Project的现有实例。