好吧,基本上我有一个我不知道可以解决的问题(可能只是设计不好。但不是我这边,如果可能的话,我宁愿自己解决)。
我正在使用的服务正在接受字典作为JSON参数,字典中的键是字符串,但值可以是数字或字符串:
"dictionary":{
"a": "thisIsA",
"b": 3,
"c": 5,
"key": "string"
}
我需要创建一个对象,以便在使用newtonsoft将其转换为JSON时,其生成的内容与上述相同
string json = JsonConvert.Serialize(myObject); // here should generate the correct json
答案 0 :(得分:4)
只需Dictionary<string, object>
即可:
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
class Test
{
static void Main()
{
var dictionary = new Dictionary<string, object>
{
{ "a", "thisIsA" },
{ "b", 3 },
{ "c", 5 },
{ "key", "string" }
};
var json = JsonConvert.SerializeObject(dictionary, Formatting.Indented);
Console.WriteLine(json);
}
}
输出:
{
"a": "thisIsA",
"b": 3,
"c": 5,
"key": "string"
}
缺少"dictionary":
部分,在序列化对象时您永远都不会获得“裸”格式。但是,如果通过合适的属性将此对象作为另一个对象的一部分,它应该可以满足您的需求。
答案 1 :(得分:2)
我知道生成json的唯一方法是在具有字典属性的字典周围创建包装器类。像这样的东西。
public class MyDictionary
{
public Dictionary<string,object> Dictionary{get;}
public MyDictionary()
{
Dictionary = new Dictionary<string,object>();
}
public void Add(string key, object value){
Dictionary.Add(key,value);
}
}
那么您可以像这样使用它
var dictionary = new MyDictionary();
dictionary.Add("a", "thisIsA");
dictionary.Add("b", 3);
dictionary.Add("c", 5);
dictionary.Add("key", "string");
,它应该序列化为
"dictionary":{
"a": "thisIsA",
"b": 3,
"c": 5,
"key": "string"
}
答案 2 :(得分:1)
您在问题中包含的JSON实际上不是有效的JSON。可以通过将其包含在{ }
中来使其有效。从您的问题尚不清楚,但是如果您想要 valid JSON结果,最简单的方法是在序列化时使用Dictionary<string, object>
和匿名对象:
var dictionary = new Dictionary<string, object>
{
{ "a", "thisIsA" },
{ "b", 3 },
{ "c", 5 },
{ "key", "string" }
};
string json = JsonConvert.SerializeObject(new { dictionary });
无论您用什么名字命名Dictionary<string, object>
变量,它都是出现在json中的“键”。所以我上面的代码将导致此json:
{
"dictionary":{
"a": "thisIsA",
"b": 3,
"c": 5,
"key": "string"
}
}
提琴here