使用DataContractJsonSerializer将JSON反序列化为Dictionary

Reg*_*ent 13 .net c# serialization json .net-4.5

我在响应中收到以下JSON结果:

{"result": { "":-41.41, "ABC":0.07, "XYZ":0.00, "Test":0.00 }}
Run Code Online (Sandbox Code Playgroud)

我准备了以下课程进行反序列化:

[DataContract]
public sealed class RpcResponse
{
    [DataMember(Name = "result")]
    public List<KeyValuePair<string, decimal>> Result { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我要使用属性反序列化它时DataContractJsonSerializer,Result最终会有零条目.(声明时也不起作用ResultDictionary<string, decimal>)

有没有办法执行此操作DataContractJsonSerializer

Kra*_*lff 0

您的 JSON 字符串表示一个具有属性 Result 的对象,该对象本身就是一个具有 4 个属性的对象:“”、ABC、XYZ 和 Test。要使结果成为 KeyValuePairs 列表,JSON 将如下所示:

{"result": [{ "":-41.41}, {"ABC":0.07}, {"XYZ":0.00}, {"Test":0.00 }] }
Run Code Online (Sandbox Code Playgroud)

请注意,如果您在 Javascript 代码中使用关联数组,它将被序列化为具有属性值对的对象,而不是对象数组。如果这是 JSON 字符串的来源,您可能需要切换到在 JS 中使用普通索引数组来获取正确的 JSON。