提问人:dododo 提问时间:11/11/2023 最后编辑:Peter Csaladododo 更新时间:11/12/2023 访问量:122
Newtonsoft json:将对象中的值序列化为字典 keyvaluepair
Newtonsoft json: serialize values in object as dictionary keyvaluepair
问:
我有一个匿名对象,例如:
string keyValue = "keyValue1";
var itemsArray = new [] { .. }
return new
{
Key = keyValue,
Items = itemsArray
}
我想通过Newtonsoft.Json(Json.NET)序列化为字符串。我使用默认的序列化配置,该配置为我提供如下输出:
{
"Key": "keyValue1",
"Items": [{ .. } , .. ]
}
这很好,但我希望格式略有不同(没有 c# 类中的字段名称):
{
"keyValue1" : [{ .. } , .. ]
}
如果我创建一个带有单个项目的 c# 字典,其中 a 将是 - ,我可以做到这一点,但我希望有更好的方法(无需创建单项目字典)?key
keyValue
value
itemsArray
注意:如果匿名类使事情变得更容易,我可以将匿名类替换为常规类
答:
1赞
Denis Micheal
11/11/2023
#1
可以使用 ExpandoObject 类
例:
var key = "keyValue1";
var itemsArray = new[] {"1","2","3" };
IDictionary<string, object> result = new ExpandoObject();
result[key] = itemsArray;
var json = JsonConvert.SerializeObject(result);
Console.WriteLine(json);
输出
{"keyValue1":["1","2","3"]}
没有接口标识符的
替代方法:
ExpandoObject
继承类,因此您可以向其添加属性,例如,该属性将具有一个对象数组,即 .Object
key
itemsArray
var itemsArray = new[] {"1","2",new object()};
//create expando object
dynamic result = new ExpandoObject();
result.key = itemsArray;
//serialize
var json = JsonConvert.SerializeObject(result);
Console.WriteLine(json);
//get values
var values = JsonConvert.DeserializeObject<ExpandoObject>(json);
//values.key allows you to access the contents of the object
输出:
{"key":["1","2",{}]}
评论
0赞
dododo
11/11/2023
这看起来和使用 Dictionary 一样,不是吗?
0赞
Denis Micheal
11/11/2023
ExpandoObject
还实现了,如果你不想要字典,又想序列化多个。IEnumerable<KeyValuePair<String,Object>>
KeyValuePair<String,Object>
0赞
dododo
11/11/2023
我想要有一个对象(不是集合)的关键点,即当我进一步使用这个节点时不需要一直调用.Single
0赞
Denis Micheal
11/12/2023
@dododo还继承了对象类,则可以使用属性和项的值进行定义ExpandoObject
key
1赞
Serge
11/12/2023
#2
你可以在一行中制作它
var json = new JObject { [keyValue] = new JArray(itemsArray)}.ToString();
评论
keyValue1
Do you know the keyValue1 at compile time
- 不,它是来自不同对象的值whats wrong with dictionary?
- KeyValuePair 没问题,但字典不是真的。我将进一步使用这种结构,并且一直调用看起来不是最好的方法.Single()