Sérialiser une Liste<KeyValuePair<string, string>> comme JSON

Je suis très nouveau avec JSON, s'il vous plaît aider!

Je suis en train de serialise un List<KeyValuePair<string, string>> JSON

Actuellement:

[{"Key":"MyKey 1","Value":"MyValue 1"},{"Key":"MyKey 2","Value":"MyValue 2"}]

Prévu:

[{"MyKey 1":"MyValue 1"},{"MyKey 2":"MyValue 2"}]

J'ai cité quelques exemples de cette et cette.

C'est mon KeyValuePairJsonConverter : JsonConverter

public class KeyValuePairJsonConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
List<KeyValuePair<object, object>> list = value as List<KeyValuePair<object, object>>;
writer.WriteStartArray();
foreach (var item in list)
{
writer.WriteStartObject();
writer.WritePropertyName(item.Key.ToString());
writer.WriteValue(item.Value.ToString());
writer.WriteEndObject();
}
writer.WriteEndArray();
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof(List<KeyValuePair<object, object>>);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var jsonObject = JObject.Load(reader);
var target = Create(objectType, jsonObject);
serializer.Populate(jsonObject.CreateReader(), target);
return target;
}
private object Create(Type objectType, JObject jsonObject)
{
if (FieldExists("Key", jsonObject))
{
return jsonObject["Key"].ToString();
}
if (FieldExists("Value", jsonObject))
{
return jsonObject["Value"].ToString();
}
return null;
}
private bool FieldExists(string fieldName, JObject jsonObject)
{
return jsonObject[fieldName] != null;
}
}

Je suis de l'appeler à partir d'un WebService méthode comme ceci

List<KeyValuePair<string, string>> valuesList = new List<KeyValuePair<string, string>>();
Dictionary<string, string> valuesDict = SomeDictionaryMethod();
foreach(KeyValuePair<string, string> keyValue in valuesDict)
{
valuesList.Add(keyValue);
}
JsonSerializerSettings jsonSettings = new JsonSerializerSettings { Converters = new [] {new KeyValuePairJsonConverter()} };
string valuesJson = JsonConvert.SerializeObject(valuesList, jsonSettings);
S'il vous plaît essayer de changer objectType == typeof(List<KeyValuePair<object, object>>); objectType == typeof(List<KeyValuePair<string, string>>); dans CanConvert méthode
Une question: pourquoi êtes - vous en utilisant la liste des KeyValuePairs au lieu de Dictionnaire?
vous avez raison! Je suppose que je me suis perdu pendant googler ce qu'il faut utiliser et s'est terminé en hausse de plus de compliquer les choses. Merci!!!!

OriginalL'auteur maryhadalittlelamb | 2017-01-06