Estoy tratando de implementar un diccionario para utilizarlo con WCF. Mis requisitos son:Cómo implementar un diccionario heredado sobre WCF
- real (variable privada o base clase) de tipo equivalente a Diccionario
- Comparer = método
System.StringComparer.InvariantCultureIgnoreCase
- personalizada (anulación/nuevo) Añadir (clave, valor) (a incluir validaciones ).
- ToString Ignorar()
- uso del mismo tipo tanto en el cliente y el host
He intentado utilizar esta clase en un proyecto común compartido por el anfitrión y el cliente WCF proyectos:
[Serializable]
public class MyDictionary : Dictionary<string, object>
{
public MyDictionary()
: base(System.StringComparer.InvariantCultureIgnoreCase)
{ }
public new void Add(string key, object value)
{ /* blah */ }
public override string ToString()
{ /* blah */ }
}
[DataContract]
[KnownType(typeof(MyDictionary))]
[KnownType(typeof(object[]))]
[KnownType(typeof(double[]))]
[KnownType(typeof(string[]))]
[KnownType(typeof(DateTime[]))]
public class ResultClass
{
public object Value{ get; set; }
/* More properties */
}
public class ParmData
{
public object Value{ get; set; }
/* More properties */
}
[DataContract]
[KnownType(typeof(MyDictionary))]
[KnownType(typeof(object[]))]
[KnownType(typeof(double[]))]
[KnownType(typeof(string[]))]
[KnownType(typeof(DateTime[]))]
public class ParameterClass
{
public List<ParmData> Data{ get; set; }
/* More properties */
}
[OperationContract]
ResultClass DoSomething(ParameterClass args);
resultados:
- Cuando paso MyDictionary como uno de los elementos ParameterClass.Data.Value, I ge t una excepción de KnownType faltante.
- Puedo devolver MyDictionary de forma segura en la clase ResultClass, pero ya no es mi tipo. Es solo un diccionario, y no puede convertirse en
MyDictionary
. También comparer =System.Collections.Generic.GenericEqualityComparer<string>
, no es el comparador insensible a mayúsculas y minúsculas que estoy buscando.
La ayuda que estoy solicitando es corregir mi intento fallido o una forma completamente diferente de cumplir mis requisitos establecidos. Cualquier solución no debería implicar copiar un diccionario a otro.
Gracias
¿Es NetDataContractAttribute una opción viable? Es decir, ¿puede tener copias del mismo ensamblaje con su clase MyDictionary garantizada disponible tanto para el cliente como para el servidor? – cfeduke
Gracias por responder a mi publicación, pero usted no ha respondido: ¿el código que publiqué funciona con su configuración? ¿O arroja una excepción (o no devuelve los datos)? –
Marc - Solo hice 1 intento con tu prueba. clone.Data lanzó una excepción de valor nulo. Gracias por la ayuda, pero Jezell me indicó la dirección correcta. – chilltemp