Json.net将平面对象序列化为键值对数组

时间:2018-08-13 10:30:59

标签: c# .net json.net

我正在尝试将仅包含字符串属性的平面对象序列化为JSON。 我得到的是:

var _ = require('lodash');

// update user
router.put('/:id', function (req, res, next) {
    // fetch user
    User.findById(req.params.id, function(err, post) {
        if (err) return next(err);

        _.assign(post, req.body); // update user
        post.save(function(err) {
            if (err) return next(err);
            return res.json(200, post);
        })
    });
});

我需要的是

{
    "Inputs": {
        "prop1": "value1",
        "prop2": "value2"
    }
}

我的第一个想法是编写一个自定义转换器,该转换器将对象首先转换为字典(基于https://stackoverflow.com/a/4944547/9806449),然后迭代键以将其构建为所需的格式,但是感觉必须存在让我望而却步的更简单的解决方案。

有什么想法吗? 谢谢!

1 个答案:

答案 0 :(得分:1)

如果我理解正确。这是基本的序列化。您想使用键,值对序列化对象。

public class Obj
{
    public Obj(string key, string value)
    {
        Key = key;
        Value = value;
    }

    public string Key { get; set; }

    public string Value { get; set; }
}

主要

 static void Main(string[] args)
 {
     var response = new Dictionary<string, List<Obj>>();
     var inputObjs = new List<Obj>();

     inputObjs.Add(new Obj("prop1", "value1"));
     inputObjs.Add(new Obj("prop2", "value2"));

     response.Add("Inputs", inputObjs);

     var serializedObj = JsonConvert.SerializeObject(response);

     Console.ReadKey();
 }

我使用Newtonsoft来序列化对象

您将获得此结果,

{
    "Inputs": [{
            "key": "prop1",
            "value": "value1"
        },
        {
            "key": "prop2",
            "value": "value2"
        }
    ]
}