2012-10-01 20 views
6

En mi solicitud MVC3 que quieren crear una colección anónima con los nombres de campo como este:¿Cómo puedo usar nombres de propiedades complejos en tipo anónimo?

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

                    } 

quiero tener esto con el fin de enviar solicitudes de envío personalizado durante las pruebas de integración de mi aplicación. ¿Cómo puedo declarar una colección anónima con estos nombres de campo?

+0

Use tipos anónimos anidados. Los períodos no están permitidos en ningún nombre de propiedad. A menos que quisiera convertirlo a un diccionario ... –

+3

También me gustaría señalar que es ** muy alentador ** que cree un modelo de vista explícito para esto en lugar de usar tipos anónimos. Mantener código con tipos anónimos va a ser difícil en el futuro. –

+0

Por curiosidad, ¿por qué las propiedades 'Phone',' PhoneExtension' y 'SmsNumber' no son' Comprador'? ¿No es el objeto completo un 'Comprador'? – canon

Respuesta

7

Usar una colección anónima de objetos anónimos, así:

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

... y en su contexto: ([editar] Ah, y no vi a su comprador ...)

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

Es posible que desee ajustar lo anterior con 'nuevo {...}' para que sea más claro –

+0

esto ayuda, pero todavía tengo una colección vacía de licencias cuando se vincula colección en el servidor. Pero siento que estoy en camino correcto. ¡Gracias! –

+0

Probablemente esto ocurra porque la lista anónima no se puede serializar –

6

Usted podría utilizar inicializador de colección de objetos y la sintaxis:

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. Básicamente la misma solución que la mía. –

+0

@ OlivierJacot-Descombes Además de que lo golpea por 3.5 minutos ...;) – canon

+0

@canon: ¡Puede suceder que se publique una respuesta mientras todavía está trabajando en la suya en Visual Studio! –

2

Prueba esto:

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: Estoy usando un tipo anónimo anidada para los compradores y una matriz anidada de otro tipo anyonymous de licencias. Esto le permite acceder a valores como este

string name = x.Buyer.Lastname; 
string id = x.Licences[0].ID; 
Cuestiones relacionadas