C# Json.NET - 反序列化字典<object, float>
C# Json.NET - Deserialize Dictionary<object, float>
我用对象作为键和一个浮点数作为值的字典。该值是实例化一个对象而不是另一个对象的机会。
我必须将它保存在 JSON 中(使用 JSON.NET - Newtonsoft)以便稍后阅读,但我找不到解决方案。
N.B.: 不是游戏也不是Unity项目
我试过这些格式:
"Droppables" : [{
{
"DroppableType": "LnUP",
"SpriteFileName": "Projectile 1.png"
},
0.15
},
{
{
"DroppableType": "AnUP",
"SpriteFileName": "Projectile 2.png"
},
0.15
}]
"Droppables" : [
{
"DroppableType": "LnUP",
"SpriteFileName": "Projectile 1.png"
},
0.15
},
{
"DroppableType": "AnUP",
"SpriteFileName": "Projectile 2.png"
},
0.15
]
"Droppables" : {
{
"DroppableType": "LnUP",
"SpriteFileName": "Projectile 1.png"
},
0.15
},
{
{
"DroppableType": "AnUP",
"SpriteFileName": "Projectile 2.png"
},
0.15
}
和许多其他人,但没有任何效果。
有没有办法或者我必须使用其他结构?
谢谢。
以对象作为键的字典没有 Json 格式的表示。您需要使用代理类型将您的字典转换为更合适的结构,如下所示:
public class Proxy
{
public string DroppableType { get; set; }
public string SpriteFileName { get; set; }
public float Probability { get; set; }
}
// before you serialize
var result = yourDictionary.Select(t=> new Proxy {
Probability = t.Value,
DroppableType = t.DroppableType,
SpriteFileName = t.SpriteFileName
}).ToArray();
// for deserializing it
var dictionary = deserialized.ToDictionary(r=> new YourType { r.DroppableType, r.SpriteFileName },r=>Probability);
我用对象作为键和一个浮点数作为值的字典。该值是实例化一个对象而不是另一个对象的机会。
我必须将它保存在 JSON 中(使用 JSON.NET - Newtonsoft)以便稍后阅读,但我找不到解决方案。
N.B.: 不是游戏也不是Unity项目
我试过这些格式:
"Droppables" : [{
{
"DroppableType": "LnUP",
"SpriteFileName": "Projectile 1.png"
},
0.15
},
{
{
"DroppableType": "AnUP",
"SpriteFileName": "Projectile 2.png"
},
0.15
}]
"Droppables" : [
{
"DroppableType": "LnUP",
"SpriteFileName": "Projectile 1.png"
},
0.15
},
{
"DroppableType": "AnUP",
"SpriteFileName": "Projectile 2.png"
},
0.15
]
"Droppables" : {
{
"DroppableType": "LnUP",
"SpriteFileName": "Projectile 1.png"
},
0.15
},
{
{
"DroppableType": "AnUP",
"SpriteFileName": "Projectile 2.png"
},
0.15
}
和许多其他人,但没有任何效果。
有没有办法或者我必须使用其他结构?
谢谢。
以对象作为键的字典没有 Json 格式的表示。您需要使用代理类型将您的字典转换为更合适的结构,如下所示:
public class Proxy
{
public string DroppableType { get; set; }
public string SpriteFileName { get; set; }
public float Probability { get; set; }
}
// before you serialize
var result = yourDictionary.Select(t=> new Proxy {
Probability = t.Value,
DroppableType = t.DroppableType,
SpriteFileName = t.SpriteFileName
}).ToArray();
// for deserializing it
var dictionary = deserialized.ToDictionary(r=> new YourType { r.DroppableType, r.SpriteFileName },r=>Probability);