我正在尝试为C#中的WebHeaderCollection或NameValueCollection类编写自定义Json序列化程序和反序列化程序。因为,它们是系统类,我无法创建需要将属性添加到类的自定义序列化程序。
到目前为止,我有这个:
public class KeysJsonConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
if (value == null)
return;
var collection = (NameValueCollection)value;
writer.WriteStartObject();
foreach (string name in collection)
{
writer.WritePropertyName(name);
writer.WriteValue(collection.Get(name));
}
writer.WriteEndObject();
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
//What should i do here to get a NameValueCollection from serialized json string
}
}
适用于以下情况:
class Program
{
static void Main(string[] args)
{
var collection = new NameValueCollection { {"a", "1" }, {"b", "2" } };
var settings = new JsonSerializerSettings();
settings.Converters.Add(new KeysJsonConverter());
var json = JsonConvert.SerializeObject(collection, Formatting.Indented, settings);
Console.WriteLine(json);
}
}
它将NameValueCollection序列化为json字符串。但我无法通过反序列化取回NameValueCollection对象。
注意:一种方法是将它们转换为字典,然后进行序列化/反序列化。但是,这不符合我的目的。