2012-10-01 18 views
6

Nella mia applicazione MVC3 Voglio creare una collezione anonimo con campi nomi come questo:Come posso utilizzare nomi di proprietà complessi in tipo anonimo?

new 
{                    
    Buyer.Firstname = "Jim", 
    Buyer.Lastname = "Carrey", 
    Phone = "403-222-6487", 
    PhoneExtension = "", 
    SmsNumber = "", 
    Buyer.Company = "Company 10025", 
    Buyer.ZipCode = "90210", 
    Buyer.City = "Beverly Hills", 
    Buyer.State = "CA", 
    Buyer.Address1 = "Address 10025" 
    Licenses[0].IsDeleted = "False", 
    Licenses[0].ID = "6", 
    Licenses[0].AdmissionDate = "2,1999", 
    Licenses[0].AdmissionDate_monthSelected = "2",                   

                    } 

Voglio avere questo al fine di inviare richieste di messaggi personalizzati durante i test di integrazione della mia app. Come posso dichiarare una collezione anonima con questo nome di campo?

+0

Utilizzare tipi anonimi nidificati. I periodi non sono consentiti in alcun nome di proprietà. A meno che non volessi convertirlo in un dizionario ... –

+3

Vorrei anche notare che è molto incoraggiante ** tu crei un modello di vista esplicito per questo invece di usare tipi anonimi. Mantenere il codice con tipi anonimi sarà difficile in futuro. –

+0

Per curiosità, perché non sono le proprietà 'Phone',' PhoneExtension' e 'SmsNumber' di' Buyer'? L'intero oggetto non è un "acquirente"? – canon

risposta

7

utilizzare una raccolta anonima di oggetti anonimi, in questo modo:

Licenses = new [] { 
    new { 
     IsDeleted = "False", 
     ID = "6", 
     AdmissionDate = "2,1999", 
     AdmissionDate_monthSelected = "2" 
    } //, ... and so on 
} 

... e nel contesto: ([modifica] Oh, e non ho visto il vostro compratore ...)

new 
{  
    Buyer = new { 
     Firstname = "Jim", 
     Lastname = "Carrey", 
     Company = "Company 10025", 
     ZipCode = "90210", 
     City = "Beverly Hills", 
     State = "CA", 
     Address1 = "Address 10025", 
    },                   
    Phone = "403-222-6487", 
    PhoneExtension = "", 
    SmsNumber = "", 
    Licenses = new [] { 
     new { 
      IsDeleted = "False", 
      ID = "6", 
      AdmissionDate = "2,1999", 
      AdmissionDate_monthSelected = "2" 
     } 
    } 
} 
+0

Potrebbe essere utile racchiudere il precedente con 'new {...}' per renderlo più chiaro –

+0

questo aiuta, ma ho ancora ottenuto una raccolta vuota di licenze durante l'associazione vincolante sul server. Ma sento di essere sulla buona strada. Grazie! –

+0

Probabilmente questo accade perché l'elenco anonimo non può essere serializzato –

6

Si potrebbe utilizzare l'oggetto e la raccolta inizializzatore sintassi:

var anonymousObject = new 
{                    
    Phone = "403-222-6487", 
    PhoneExtension = "", 
    SmsNumber = "", 
    Buyer = new 
    { 
     Firstname = "Jim", 
     Lastname = "Carrey", 
     Company = "Company 10025", 
     ZipCode = "90210", 
     City = "Beverly Hills", 
     State = "CA", 
     Address1 = "Address 10025" 
    }, 
    Licenses = new[] 
    { 
     new 
     { 
      IsDeleted = "False", 
      ID = "6", 
      AdmissionDate = "2,1999", 
      AdmissionDate_monthSelected = "2",                   
     } 
    } 
} 
+0

+1. Fondamentalmente la stessa soluzione della mia. –

+0

@ OlivierJacot-Descombes Oltre a picchiarti di 3,5 minuti ...;) – canon

+0

@canon: Può succedere che una risposta venga pubblicata mentre stai ancora lavorando sul tuo in Visual Studio! –

2

Prova questa:

var x = new { 
    Phone = "403-222-6487", 
    PhoneExtension = "", 
    SmsNumber = "", 
    Buyer = new { 
     Firstname = "Jim", 
     Lastname = "Carrey", 
     Company = "Company 10025", 
     ZipCode = "90210", 
     City = "Beverly Hills", 
     State = "CA", 
     Address1 = "Address 10025" 
    }, 
    Licenses = new[] { 
     new { 
      IsDeleted = "False", 
      ID = "6", 
      AdmissionDate = "2,1999", 
      AdmissionDate_monthSelected = "2"}, 
     new { 
      IsDeleted = "True", 
      ID = "7", 
      AdmissionDate = "17,2001", 
      AdmissionDate_monthSelected = "3"} 
    } 
}; 

Nota: sto usando un tipo anonimo nidificato per gli acquirenti e di un array nidificato di un altro tipo anyonymous per le licenze. Ciò consente di accedere a valori come questo

string name = x.Buyer.Lastname; 
string id = x.Licences[0].ID; 
Problemi correlati