Pregunta

Tengo el siguiente modelo:

[DataContract]
public class MessageHeader
{
    private Guid? messageId;

    public Guid MessageId
    {
        get
        {
            if (messageId == null)
                messageId = Guid.NewGuid();

            return messageId.Value;
        }
    }

    [DataMember]
    public string ObjectName { get; set; }

    [DataMember]
    public Dictionary<string, object> Parameters { get; set; } // Can't deserialize this

    [DataMember]
    public Action Action { get; set; }

    [DataMember]
    public User InitiatingUser { get; set; }
}

Ahora, por alguna razón desconocida, DataContractJsonSerializer no puede deserializar JSON en un diccionario (Véase la sección de detalles adicionales).
Desafortunadamente DataContractJsonSerializer también está sellado por razones que están más allá de mí.
Necesito una manera de conseguir alrededor de él, ¿alguien tiene una pista?

¿Fue útil?

Solución

Dado que no es un tipo de diccionario en javascript que es bastante difícil tener JSON deparse en una sola. Lo que vamos a tener que hacer es escribir un convertidor de sí mismo.

Sin embargo, esto también es cierto en la mayoría de los objetos de serialización personalizada, así que espero que no es ninguna gran sorpresa.

Ahora debería, sin embargo, leído como un KeyValuePair para que pueda probar que, para ver si se trata de al menos deserializar para usted. Por el contrario, se necesitaría una List<KeyValuePair<>>

Qué Dictionary<string,string> se traduce en JSON para:

var dict = new Dictionary<string,string>; 
dict["Red"] = "Rosso"; 
dict["Blue"] = "Blu"; 
dict["Green"] = "Verde";

[{"Key":"Red","Value":"Rosso"},
 {"Key":"Blue","Value":"Blu"},
 {"Key":"Green","Value":"Verde"}]

El mismo asociativo de javascript en JSON:

var a = {}; 
a["Red"] = "Rosso"; 
a["Blue"] = "Blu"; 
a["Green"] = "Verde";

{"Red":"Rosso","Blue":"Blu","Green":"Verde"}

Así que no es el problema en pocas palabras.


Unos enlaces de seguimiento de utilidad

http://my6solutions.com/post/2009/06/17/The-serialization-and-deserialization-of-the-generic-Dictionary-via-the-DataContractJsonSerializer.aspx

http://msdn.microsoft.com/ en-us / library / system.runtime.serialization.collectiondatacontractattribute.aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top