【发布时间】:2018-03-20 15:01:10
【问题描述】:
我正在尝试反序列化以下 json:
{
"oxide":{
"Al2O3":"0.3",
"CaO":"0.3",
"FeO":"0.3",
"MgO":"0.3",
"MnO":"0.3",
"SiO2":"0.3"
},
"temperature": "1800"
}
当我以这种方式转换时,一切正常:
Oxides oxides = new Oxides();
string oxidequery = req.Query["oxide"];
string temperature = req.Query["temperature"];
string requestBody = new StreamReader(req.Body).ReadToEnd();
dynamic data = JsonConvert.DeserializeObject(requestBody);
oxide.Al2O3 = data?.oxide.Al2O3;
oxide.CaO = data?.oxide.CaO;
oxide.FeO = data?.oxide.FeO;
oxide.MgO = data?.oxide.MgO;
oxide.MnO = data?.oxide.MnO;
oxide.SiO2 = data?.oxide.SiO2;
double tempDouble = temperature ?? data?.temperature;
但是当我这样做时它不起作用:
Oxides oxides = new Oxides();
string oxidequery = req.Query["oxide"];
string temperature = req.Query["temperature"];
string requestBody = new StreamReader(req.Body).ReadToEnd();
dynamic data = JsonConvert.DeserializeObject(requestBody);
oxide = (Oxides)data?.oxide;
double tempDouble = temperature ?? data?.temperature;
在第二种方法中我得到了错误
无法将类型“Newtonsoft.Json.Linq.JObject”转换为“氧化物”。
我错过了什么?我已经搜索过,发现我必须显式转换data.oxide,但我已经在这样做了。
【问题讨论】:
-
尝试为反序列化提供类型 => JsonConvert.DeserializeObject
(requestBody);解析部分对象:newtonsoft.com/json/help/html/SerializingJSONFragments.htm -
当我采用类似的方法时,我发现尝试分配给类时的数字选择通常是浮点数,而不是我需要的小数或长整数。如果我们能看到您的 Oxide 课程会有所帮助。