我正在开发一个具有所有功能和限制的Silverlight项目。这是对以前产品的更新。为了快速推向市场,其目的是尽可能多地维护后端(Web服务,数据库等)。如果没有别的办法,我们要求只触及后端。我们主要专注于重写前端。很快就会有一个重要的行业会议,我们想要展示产品的早期外观。在官方发布之前可能还有一段时间做一些重新工作,但后端可能需要等到V2。
好的,所以我要做的就是使用MVVM模式和我负责的前端的数据绑定(MVVM模式由上面指定)。我有一个pre-existig Web服务,提供一些XML。该XML的示例如下所示:
<CODEBOOKINDEX>
<ME Words="1" Score="25" Highscore="1">Main Entry Item
<NM>attack</NM>
<NM>cardiac</NM>
<NM>chest</NM>
<NM>effort</NM>
<NM>heart</NM>
<NM>pectoris</NM>
<NM>syndrome</NM>
<NM>vasomotor</NM>
<IE>413.9</IE>
<M1 Words="1" Score="25">An M1 Item (Same as ME, just first level Child)
<IE>557.1</IE>
</M1>
<M1 Words="1" Score="25">Another M1 Item
<IE>443.9</IE>
<M2 Words="1" Score="25">An M2 Item (again same as ME, just a child of an M1 item)
<CF>Arteriosclerosis,extremities</CF>
<IE>440.20</IE>
</M2>
</M1>
</ME></CODEBOOKINDEX>
所以,我的问题,因为我想使用MVVM模式将其绑定到UI,在我看来,我需要将其转换为自定义对象。正如您所看到的,有许多“Entry”项,MainEntry(ME)和Subentries(本例中为M1或M2),这些都将包含某些其他节点(例如,它们都将具有IE节点),它们可以包含0个或更多其他节点类型(例如,它们可以包含或不包含一个或多个NM节点,或者它们可以包含或不包含一个CF节点)。 Whihc意味着(至少对我而言)我无法直接绑定到XML,因为:
所以,我正在尝试理解将这个XML转换为可绑定对象的最佳方法,在我看来,这意味着将此XML转换为模型的对象,然后在该模型上覆盖视图模型。
这可以通过LINQ to XML查询轻松完成,还是我真的进入了ORM的领域,如NHibernate或Entity Framework(请不要讨论WHICH ORM的神圣战争)? 我刚刚建立了我将用于UI的控件,我需要快速向我的经理演示 HOW 我将要处理翻译。
所以,真正的问题:
答案 0 :(得分:9)
我需要ORM吗?
没有。您没有映射到关系源,因此对象关系映射器将无法帮助。
使用Linq to Xml完成任务。
public CustomClass TranslateME(XElement source)
{
CustomClass result = new CustomClass();
result.Words = (int) source.Attribute("Words");
result.Score = (int) source.Attribute("Score");
XAttribute highScore = source.Attribute("HighScore");
result.HighScore = (highScore == null) ? 0 : (int) highScore;
result.NMs = source
.Elements("NM")
.Select(x => x.Value)
.ToList();
result.IE = source
.Element("IE").Value;
result.SubEntries = source
.Elements("M1")
.Select(x => TranslateM1(x))
.ToList();
return result;
}