我想一個IEnumerable<IEnumerable<string>>
轉換爲ICollection<Character>
,但努力找出要做正確的方式,因爲一個對象的結構比其他的結構不同。自IEnumerable <IEnumerable的<string>>轉換爲ICollection的<T>
轉換的原因是採取JSON反序列化並通過實體框架將其插入到數據庫中。 json數據沒有標準化,並且與數據庫的確切結構不匹配。在數據庫中,我有一個movie
和一個person
,它們具有多對多的關係。他們之間的橋表是characters
。但是json只有一個帶有人物對象數組的電影對象,每個人都有一組他們玩的角色(IEnumerable<IEnumerable<string>>
)。
基本上,我需要將每部電影的人物和他們的角色轉換爲每部電影的角色及其相應的人物。
var movie = dataContractMovies.Select(m => new Movie {
Title = m.Title,
// not sure how to convert each Person and their characters
Characters = // Need to take each Person and their Characters in m.Cast and cast to a new Character and a new Person for which the Character belongs to
});
將從
public class MovieDataContract {
[DataMember(Name = "title")]
public string Title { get; set; }
[DataMember(Name = "abridged_cast")]
public virtual IEnumerable<Person> Cast { get; set; }
}
[DataContract]
public class Person {
[DataMember(Name = "name")]
public string Name { get; set; }
[DataMember(Name = "characters")]
public IEnumerable<string> Characters { get; set; }
}
轉換爲
public partial class Movie {
public string Title { get; set; }
public virtual ICollection<Character> Characters { get; set; }
public Movie() {
this.Characters = new HashSet<Character>();
}
}
public partial class Character {
public string Name { get; set; }
public virtual Movie Movie { get; set; }
public virtual Person Person { get; set; }
}
public partial class Person {
public string Name { get; set; }
public virtual ICollection<Character> Characters { get; set; }
public Person() {
this.Characters = new HashSet<Character>();
}
}
更新和進一步的問題
什t如果我只是在MovieDataContract
上加了public IEnumerable<Character> Characters
?然後,我可以做這樣的事情(在理論上,沒有測試)...
Characters = m.Characters;
所以我的新MovieDataContract
是這樣的......
[DataContract]
public class MovieDataContract {
[DataMember(Name = "title")]
public string Title { get; set; }
[DataMember(Name = "abridged_cast")]
private IEnumerable<Person> _cast { get; set; }
public IEnumerable<Character> Characters {
get{
foreach(var person in _cast) {
foreach(string name in person.characters) {
yield return new Character { Name = name, Person = new Person { Name = person.name }}
}
}
}
}
}
你打算如何從'串去'去'Character'?如果沒有將僞值對象轉換爲引用對象的好方法,找出包裝問題並不會對您有太大的幫助。 – tmesser
它看起來像* bflemi3 *想要將樹結構(由Web服務返回)轉換爲關係結構(要使用實體框架插入到數據庫中)。 IEnumerable>東西是一個紅色的鯡魚。 –
dtb
@ bflemi3:如果您可以添加示例,這將有所幫助。 – dtb