【问题标题】:How to Serialize a Dictionary<string,string> and not surround the value with quotes?如何序列化 Dictionary<string,string> 而不用引号括起来?
【发布时间】:2012-02-13 02:21:27
【问题描述】:

示例模型:

public class Thing
{
[JsonProperty("foo")]    
public string Foo {get;set;}
[JsonProperty("bars")]  
public Dictionary<string,string> Bars {get;set;}
}

我希望输出如下所示:

{"foo":"Foo Value", "bars":{"key1":key1Value,"key2":key2Value}}

我希望字典的值不带引号的原因是我可以通过 jquery 从客户端提取值:

{"foo":"Foo Value", "bars":{"key1":$('#key1').val(),"key2":$('#key2').val()}}

这可以使用 Json.Net 吗?

【问题讨论】:

  • 不确定我是否理解这里的问题,如果没有引号,JSON 将无法反序列化,或者您是否真的希望将其序列化为 "$('#key1').val() “?
  • @PaulTyng,就像我上面提到的那样,当浏览器解释它时,我需要 $('#key1').val() 不在引号中。我期待 JQuery 选择器从页面上的元素中提取值。如果它保留在引号中,则将其解释为字符串,并且永远不会运行 JQuery 选择器。如果我也在该部分调用 JavaScript 函数,这将是类似的功能。
  • [这和我要找的差不多。][1] [1]: stackoverflow.com/questions/4547550/…
  • 知道了,很抱歉响应速度很慢,但你得到了正确的答案,这是 JSON.NET 的最佳用例,任何像这样的自定义序列化内容

标签: json.net


【解决方案1】:

这是我想出的实现:

public class DictionaryConverter : JsonConverter
    {
        public override bool CanConvert(Type objectType)
        {
            return objectType == typeof(Dictionary<string, string>);
        }

        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            throw new NotImplementedException();
        }

        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            var items = (Dictionary<string, string>)value;
           writer.WriteStartObject();
            foreach (var item in items)
            {

                writer.WritePropertyName(item.Key);
                writer.WriteRawValue(item.Value);

            }
            writer.WriteEndObject();
            writer.Flush();

        }
    }

This post 也有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多