Я пытаюсь преобразовать IEnumerable<IEnumerable<string>>
в ICollection<Character>
, но изо всех сил, чтобы выяснить правильный способ сделать это, так как структура одного объекта отличается от структуры другого.Преобразование из IEnumerable <IEnumerable <string>> к ICollection <T>
Причина преобразования заключается в том, чтобы выполнить десериализацию json и вставить ее в базу данных через Entity Framework. Данные 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>();
}
}
UPDATE И еще один вопрос
Wha t, если я только что добавил 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 }}
}
}
}
}
}
Как вы предлагаете, чтобы перейти от 'строки '' 'Символ'? Выяснение проблем с упаковкой не поможет вам слишком сильно, если нет хорошего способа превратить объект psuedo-value в ссылочный объект. – tmesser
Похоже, что * bflemi3 * хочет преобразовать древовидную структуру (возвращаемую веб-службой) в реляционную структуру (которая будет вставлена в базу данных с использованием структуры сущностей). Элемент IEnumerable> - это красная селедка. –
dtb
@ bflemi3: Было бы полезно, если бы вы могли добавить пример. – dtb