如何在c#中为NameValueCollection编写自定义json序列化器和反序列化器?

时间:2016-12-15 09:42:38

标签: c# asp.net .net json serialization

我正在尝试为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对象。

注意:一种方法是将它们转换为字典,然后进行序列化/反序列化。但是,这不符合我的目的。

0 个答案:

没有答案