序列化List< KeyValuePair< string,string>>作为JSON
我对JSON非常了解,请帮忙!
I'm very new with JSON, please help!
我正在尝试将List<KeyValuePair<string, string>>
序列化为JSON
I am trying to serialise a List<KeyValuePair<string, string>>
as JSON
当前:
[{"Key":"MyKey 1","Value":"MyValue 1"},{"Key":"MyKey 2","Value":"MyValue 2"}]
预期:
[{"MyKey 1":"MyValue 1"},{"MyKey 2":"MyValue 2"}]
我从 this 和这是我的KeyValuePairJsonConverter:JsonConverter
This is my 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方法调用它
I am calling it from a WebService method like this
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和字典:
You can use Newtonsoft and dictionary:
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方法即可.
You are currently using Newtonsoft, so just change your List<KeyValuePair<object, object>>
to Dictionary<object,object>
and use the serialize and deserialize method from the package.