gpt4 book ai didi

c# - 为什么序列化 NameValueCollection 会导致数据丢失?

转载 作者:行者123 更新时间:2023-12-04 08:54:58 30 4
gpt4 key购买 nike

例如,如果我们有 {"Parameters":["name" : "test"]}它将被序列化为 {"Parameters":["name"]} . (使用 System.Text.Json)
这是为什么?
编辑:this issue这引起了我的注意,还有 following code进行序列化/反序列化。
编辑 2:为那些无法遵循上述给定 Material 的人增加了更多清晰度

var asd = new SomeObject()
{
Properties = new NameValueCollection
{
{ "test1", "ok1" },
{ "test2", "ok2" }
}
};

Console.WriteLine(System.Text.Json.JsonSerializer.Serialize<SomeObject>(asd));
序列化为 {"Properties":["test1","test2"]} .

最佳答案

这是由于 NameValueCollection 的性质.它的迭代结束了 key 而不是键值对。
这就是为什么在迭代时必须执行以下操作才能获取值的原因:

foreach (var key in yourCollection)
{
Console.WriteLine($"Key {key} value {yourCollection[key]}.");
}
所有序列化器只是迭代所有可枚举,他们不了解实际返回的内容。
更合适的是 Dictionary<string, string> .
在你的情况下:
var asd = new SomeObject()
{
Properties = new Dictionary<string, string>
{
{ "test1", "ok1" },
{ "test2", "ok2" }
}
};
这将返回您的预期。如果你想要一个不区分大小写的字典,只需在创建它时将其添加为参数: new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);

关于c# - 为什么序列化 NameValueCollection 会导致数据丢失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63879313/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com