当前位置: 首页 > 面试题库 >

序列化清单>作为JSON

邢高澹
2023-03-14
问题内容

我是JSON的新手,请帮忙!

我正在尝试序列List<KeyValuePair<string, string>>化为JSON

目前:

[{"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方法即可。



 类似资料:
  • 问题内容: 我正在尝试转换为。当您有许多异步任务并且需要获得所有异步任务的结果时,这非常有用。 如果它们中的任何一个失败,那么最终的未来将失败。这就是我实现的方式: 要运行它: 如果其中任何一个失败,则失败。即使有一百万个期货,它也能提供预期的输出。我的问题是:假设如果有超过5000个期货,并且其中任何一个失败,我都会得到: java.util.concurrent.CompletableFutu

  • 问题内容: 之间有什么区别 和 ? 如果没有区别,使用的好处是什么? 问题答案: 区别在于,例如 是一个 但不是 所以: 你可能会认为一个的S的关系是一个的S,但有一个很好的理由,为什么它不是: 假设您可以执行以下操作: 所以这就是为什么的不是应该是一个的秒。

  • 目前正在用python进行一个快速的小项目,我正在尝试将一个对象编码为JSON字符串。我以前做过几次,除了现在,没有任何问题。通常我只是做以下事情。 但问题是我的类属性之一是一个datetime.datetime对象,我被抛出以下错误 是否有任何想法或总结可以启用将datetime属性包含到JSON输出中的功能?? 提前感谢!

  • 随着Ajax 的出现,表单序列化已经成为一种常见需求(第21 章将讨论Ajax)。在JavaScript 中,可以利用表单字段的type 属性,连同name 和value 属性一起实现对表单的序列化。在编写代码之前,有必须先搞清楚在表单提交期间,浏览器是怎样将数据发送给服务器的。 对表单字段的名称和值进行URL 编码,使用和号(&)分隔。 不发送禁用的表单字段。 只发送勾选的复选框和单选按钮。 不

  • 问题内容: 我正在客户端和Django服务器之间发送信息,并且我想对此使用JSON。我正在发送简单的信息-字符串列表。我尝试使用,但是当我这样做时, 看来这只能用于Django对象。如何序列化简单的Python对象? 问题答案: 你可以使用纯Python执行此操作:

  • 我想在Backbone.js模型中对表单进行一些服务器前验证。要做到这一点,我需要将用户输入从表单转换为可用的数据。我找到了三种方法来做到这一点: 不幸的是,没有一个提供我所需要的好的可扩展和可开发的JSON对象。我已经查看了几个关于Stack ;溢出的问题,但我只发现了一些额外的库。 underscore.js、当前的jQuery或backbone.js是否提供了一个helper方法? 产出 b