我是JSON的新手,请帮忙!
我正在尝试序列List<KeyValuePair<string, string>>化为JSON
List<KeyValuePair<string, string>>
目前:
[{"Key":"MyKey 1","Value":"MyValue 1"},{"Key":"MyKey 2","Value":"MyValue 2"}]
预期:
[{"MyKey 1":"MyValue 1"},{"MyKey 2":"MyValue 2"}]
这是我的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; } }
我从这样的WebService方法调用它
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);
您可以使用Newtonsoft和字典:
var dict = new Dictionary<int, string>(); dict.Add(1, "one"); dict.Add(2, "two"); var output = Newtonsoft.Json.JsonConvert.SerializeObject(dict);
输出为:
{"1":"one","2":"two"}
编辑
感谢 @Sergey Berezovskiy 提供的信息。
您当前正在使用Newtonsoft,因此只需将其更改List<KeyValuePair<object, object>>为Dictionary<object,object>并使用软件包中的serialize and deserialize方法即可。
List<KeyValuePair<object, object>>
Dictionary<object,object>