저는 자동 매핑이 새롭고 ValueInjecter가 최신 버전입니다. 이것이 쉬운 질문이라면 유감이지만 어디서나 답을 찾을 수는없는 것 같습니다.ValueInjecter - 재귀 적 매핑
어떻게 재귀 적 매핑을 수행 할 수 있습니까? ,
private SubjectViewModel createSubject(DataService.SubjectResult s) {
SubjectViewModel result = new SubjectViewModel();
result.SubjectName = s.SubjectName;
result.id = s.id;
foreach (DataService.SubjectResult sChild in s.Children)
result.ChildSubjects.Add(createSubject(sChild));
return result;
}
내가 ValueInjecter이이 상황의 생계 유형 같은데요 예를 들어, 여기에 SubjectViewModel에 (내 데이터 서비스에서) 주제를 매핑 내 현재 공장 방법 그래서 누군가가 올바른 방향으로 나를 가리킬 수 있다면 나는 그것을 고맙게 생각할 것입니다! 여기
는 가짜지만, 전체 코드 샘플 :[TestClass]
public class UnitTest1 {
[TestMethod]
public void TestMethod1() {
Subject S = new Subject() {
id = 1,
SubjectName = "S1", Children = { new Subject() { id = 2, SubjectName = "S1a" },
new Subject() { id = 3, SubjectName = "S1b" }}
};
SubjectViewModel VM = new SubjectViewModel();
VM.InjectFrom<CollectionToCollection>(S);
Assert.AreEqual(2, VM.Children.Count);
}
}
public class Subject {
public Subject() {
Children = new List<Subject>();
}
public string SubjectName { get; set; }
public int id { get; set; }
public List<Subject> Children { get; private set; }
}
public class SubjectViewModel {
public SubjectViewModel() {
Children = new List<SubjectViewModel>();
}
public string SubjectName { get; set; }
public int id { get; set; }
public List<SubjectViewModel> Children { get; set; }
}
public class CollectionToCollection : Omu.ValueInjecter.ConventionInjection {
protected override bool Match(ConventionInfo c) {
return c.SourceProp.Name == "Children";
}
protected override object SetValue(ConventionInfo c) {
List<SubjectViewModel> result = new List<SubjectViewModel>();
foreach (Subject S in (c.SourceProp.Value as IEnumerable<Subject>))
result.Add(new SubjectViewModel());
return result;
}
}
편집 - 나는 이것이 본래의 접근법은 알고, 그 재귀 아니다. 지금은 단지 지금까지 예외없이이를 얻으려고
는 지금은 얻을 :
System.ArgumentException : 개체 유형 'System.Collections.Generic.List`1 [TestValueInjector의 .SubjectViewModel] ' 을 'System.String '유형으로 변환 할 수 없습니다.
멋진, 감사합니다! –