2012-10-01 13 views
6

W mojej aplikacji MVC3 Chcę utworzyć anonimowe zbieranie z pól nazw, takich jak ten:Jak używać złożonych nazw właściwości w typie anonimowym?

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",                   

                    } 

Chcę mieć to w celu wysłania żądania zwyczaj postu podczas testowania integracyjnego mojej aplikacji. Jak mogę zadeklarować kolekcję anonimową z tymi nazwami pól?

+0

Użyj zagnieżdżonych typów anonimowych. Okresy nie są dozwolone w żadnej nazwie nieruchomości. Chyba, że ​​chciałbyś przekonwertować go na słownik ... –

+3

Chciałbym również zauważyć, że jest ** bardzo zachęcony ** tworzysz jawny model widoku zamiast używać anonimowych typów. Utrzymywanie kodu z anonimowymi typami będzie trudne w przyszłości. –

+0

Z ciekawości, dlaczego nie ma właściwości 'Telefon',' PhoneExtension' i 'SmsNumber'' Buyer'? Czy cały obiekt nie jest "Kupującym"? – canon

Odpowiedz

7

Korzystanie anonimowe zbieranie anonimowych obiektów, tak jak poniżej:

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

... iw kontekście: ([edit] Aha, i nie widzę kupującego ...)

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

Może chcieć zawrzeć powyższe z 'nowym {...}', aby było bardziej zrozumiałe, –

+0

to pomaga, ale wciąż mam pustą kolekcję licencji podczas wiązania kolekcji na serwerze. Ale czuję, że jestem na dobrej drodze. Dzięki! –

+0

Prawdopodobnie dzieje się tak, ponieważ lista anonimowa nie może być serializowana –

6

można użyć obiektów i zbieranie initializer składnię:

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. Zasadniczo to samo rozwiązanie niż moje. –

+0

@ OlivierJacot-Descombes Oprócz tego, że pokonał cię 3,5 minuty ...;) – canon

+0

@canon: Może się zdarzyć, że odpowiedź zostanie opublikowana, gdy nadal będziesz pracować nad swoim w Visual Studio! –

2

Spróbuj:

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"} 
    } 
}; 

Uwaga: używam zagnieżdżonego anonimowego typu dla kupujących i zagnieżdżonej tablicy jeszcze innego typu typu anyonymous dla licencji. Pozwala to na dostęp do takich wartości, jak:

string name = x.Buyer.Lastname; 
string id = x.Licences[0].ID; 
Powiązane problemy