2012-03-17 21 views
5

En mi solución dependo mucho de los diccionarios con una enumeración como clave. Encuentro que es fácil de entender y leer esta construcción.¿Alternativa al diccionario con claves enum?

Un obstáculo importante para lo anterior es que no es posible serializar esto. Vea Problems with Json Serialize Dictionary<Enum, Int32> para más información sobre esto.

Mi pregunta es:
¿Existe un patrón igualmente legibles e intuitivo para la sustitución de la Dictionary<enunm,object> que es JSON serializable con el construido en serializador JSON?

Hoy he reemplazado a.Instance.QueryableFields[Fields.Title] con a.Instance.QueryableFields[ Fields.Title.ToString()]. No es muy elegante, y se abre para errores.

+0

¿Es la enumeración una propiedad en su objeto que se almacena como el valor del diccionario? Podría sugerir usar el valor enum como un código hash en ese caso. – Brannon

+0

¿Cómo funcionaría eso? ¿Podría señalarme un ejemplo? – Fontanka16

Respuesta

-1

Se puede reemplazar fácilmente un diccionario con una gran variedad aquí, como en C# enumeraciones se guardan internamente como enteros:

public enum MyEnum { Zero=0, One, Two }; 

object[] dictionary = new object[3]; 
dictionary[(int)MyEnum.Zero] = 4; 

EDIT: (ver comentarios)

También puede reemplazar Dictionary<Enum, Object> con Dictionary<Int, Object>.

+5

Esto tiene sentido solo si está seguro de que los valores van desde '0' hasta 'array.Length-1' sin ningún salto. Si tiene una enumeración como '{A = 0, B = 42, C = 31415}', debe crear una matriz de elementos '31416' ... – digEmAll

1

Al serializarlo, simplemente seleccione el valor de la cadena. No es muy limpio, pero funciona.

a.Instance.QueryableFields.ToDictionary(x => x.Key.ToString(), x => x.Value) 
+0

Es una opción que he considerado. Pero luego tengo que escribir mi propio método de serialización. Gracias por la sugerencia, pero estoy buscando una manera de reemplazar todo. Ya sea el diccionario o la enumeración. – Fontanka16

Cuestiones relacionadas