2010-04-20 5 views
8

me preguntaba si alguien ha tenido un poco de suerte para conseguir una DynamicObject para serializar y trabajar con WCF?DynamicObject y apoyo WCF

Aquí está mi pequeña prueba:

[DataContract] 
class MyDynamicObject : DynamicObject 
{ 
    [DataMember] 
    private Dictionary<string, object> _attributes = 
     new Dictionary<string, object>(); 

    public override bool TryGetMember(GetMemberBinder binder, out object result) 
    { 
     string key = binder.Name; 

     result = null; 

     if (_attributes.ContainsKey(key)) 
      result = _attributes[key]; 

     return true; 
    } 

    public override bool TrySetMember(SetMemberBinder binder, object value) 
    { 
     _attributes.Add(binder.Name, value); 

     return true; 
    } 
} 

var dy = new MyDynamicObject(); 
var ser = new DataContractSerializer(typeof(MyDynamicObject)); 
var mem = new MemoryStream(); 
ser.WriteObject(mem, dy); 

El error que consigo es:

System.Runtime.Serialization.InvalidDataContractException fue controlada Mensaje = Tipo 'ElasticTest1.MyDynamicObject' no puede heredar de una tipo que no está marcado con DataContractAttribute o SerializableAttribute. Considere marcar el tipo base 'System.Dynamic.DynamicObject' con DataContractAttribute o SerializableAttribute, o eliminarlos del tipo derivado.

¿Alguna sugerencia?

+0

El mensaje de error indica que no se puede hacer esto a menos que cambie System.Dynamic.DynamicObject la que no se puede porque es parte de .NET Framework. Entonces no puedes hacer esto. ¿Qué estás tratando de lograr, tal vez hay una manera diferente de alcanzar el mismo objetivo? – dtb

+0

Por supuesto, aunque no puede cambiar DynamicObject, es de código abierto (http://dlr.codeplex.com/) para que pueda copiarlo y modificarlo. –

+0

Estoy tratando de enviar un DynamicObject por cable a un cliente SL 4. – rboarman

Respuesta

2

¿Se puede usar algo como Dictionary<TKey, TValue> para lograr esto?

estoy tratando de resolver un problema similar. Mi problema es que tengo DTO para transferir datos entre el cliente y el servidor. Sin embargo, siempre debe tener DTO que tengan grano fino y aplanados.

Por ejemplo, si un cliente desea obtener el Nombre e ID del Cliente y no está interesado en nada más, lo ideal sería que creara un DTO que solo tenga estas 2 propiedades. Si transfiriera el mismo CustomerDTO para todos los métodos, hay muchas implicaciones de rendimiento. Podría estar transfiriendo una gran cantidad de campos redundantes.

+0

que renunció a DynamicObjects y fue con dtos aplanarse con AutoMapper. Funciona bastante bien para lo que necesito. – rboarman