sto cercando di convertire un IEnumerable<IEnumerable<string>>
-ICollection<Character>
ma fatica a capire il modo giusto per farlo in quanto la struttura di un oggetto è diverso rispetto alla struttura degli altri.Conversione da IEnumerable <IEnumerable <string>> per ICollection <T>
Il motivo della conversione è di prendere una deserializzazione JSON e inserirla in un database tramite Entity Framework. I dati JSON non sono normalizzati e non corrispondono alla struttura esatta del database. Nel database ho uno movie
e uno person
con una relazione molti-a-molti. La tabella ponte tra loro è characters
. Ma il json ha solo un oggetto film con una serie di oggetti di persone e ogni persona con una serie di personaggi che giocano (IEnumerable<IEnumerable<string>>
).
Fondamentalmente, ho bisogno di convertire le persone di ciascun film e i loro personaggi nel personaggio di ciascun film e nella sua rispettiva persona.
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
});
Converti da
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; }
}
Convertire a
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>();
}
}
AGGIORNAMENTO E ulteriore domanda
Wha t se ho appena aggiunto un public IEnumerable<Character> Characters
allo MovieDataContract
? Poi ho potuto solo fare qualcosa di simile (in teoria, non hanno testato) ...
Characters = m.Characters;
Quindi il mio nuovo MovieDataContract
sarebbe simile a questa ...
[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 }}
}
}
}
}
}
Come si fa a proporre di andare da 'stringa per 'carattere'? Capire i problemi di packaging non ti aiuterà troppo se non c'è un buon modo per trasformare un oggetto psuedo-value in un oggetto di riferimento. – tmesser
Sembra che * bflemi3 * voglia convertire una struttura ad albero (come restituita da un servizio Web) in una struttura relazionale (da inserire in un database usando il framework di entità). Il materiale IEnumerable> è un'aringa rossa. –
dtb
@ bflemi3: Sarebbe utile se fosse possibile aggiungere un esempio. – dtb