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);