Domanda

Ho il seguente modello:

[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; }
}

Ora, per qualche ragione sconosciuta, DataContractJsonSerializer non può deserializzare JSON in un dizionario (vedere la sezione dettagli aggiuntivi).
Purtroppo DataContractJsonSerializer è anche sigillato per motivi che sono al di là di me.
Ho bisogno di un modo per aggirare l'ostacolo, qualcuno ha un indizio?

È stato utile?

Soluzione

Dal momento che non v'è un tipo di dizionario in JavaScript è piuttosto difficile avere JSON Deparse in uno solo. Quello che si sta andando ad avere a che fare è scrivere un convertitore da soli.

Tuttavia, questo è anche vero per la maggior parte degli oggetti di serializzazione personalizzato, quindi speriamo che si presenta come nessuna grande sorpresa.

Ora dovrebbe, tuttavia, leggere come un KeyValuePair modo da poter provare che, per vedere se si tratta di almeno deserializzazione per voi. Piuttosto, si avrebbe bisogno di un List<KeyValuePair<>>

Che si traduce in Dictionary<string,string> per JSON:

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"}]

Lo stesso associativa da JavaScript in JSON:

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

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

Quindi, c'è il problema in poche parole.


Alcuni link follow per utilità

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

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top