を変換しようとしてIEnumerable<IEnumerable<string>>
いICollection<Character>
ますが、あるオブジェクトの構造が他のオブジェクトの構造と異なるため、正しい方法を見つけるのに苦労しています。
変換の理由は、json の逆シリアル化を取得し、それを Entity Framework を介してデータベースに挿入することです。json データは正規化されておらず、データベースの正確な構造と一致しません。データベースには、多対多の関係にあるamovie
と aがあります。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>();
}
}
更新と追加の質問
に を追加した場合はどうpublic IEnumerable<Character> Characters
なりMovieDataContract
ますか? 次に、このようなことを行うことができます(理論的には、テストしていません)...
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 }}
}
}
}
}
}