【发布时间】:2019-07-21 08:49:01
【问题描述】:
能否请您帮我将以下 JSON 反序列化为 c#。
[
{
"detectedLanguage": {
"language": "en",
"score": 10.0
},
"translations": [
{
"text": "",
"to": "da"
},
{
"text": "",
"to": "da"
}
]
}
]
我已使用以下 c# 类进行反序列化,但出现异常。
public class DetectedLanguage
{
public string language { get; set; }
public int score { get; set; }
}
public class Translation
{
public string text { get; set; }
public string to { get; set; }
}
public class RootObject
{
public DetectedLanguage detectedLanguage { get; set; }
public List<Translation> translations { get; set; }
}
我的反序列化代码是:
var response = client.SendAsync(request).Result;
var jsonResponse = response.Content.ReadAsStringAsync().Result;
var result = JsonConvert.DeserializeObject<RootObject>(jsonResponse);
例外
无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型 'RootObject' 因为该类型需要 JSON 对象(例如 {"name":"value"}) 正确反序列化。要修复此错误 将 JSON 更改为 JSON 对象(例如 {"name":"value"})或更改 将类型反序列化为数组或实现集合的类型 接口(例如 ICollection、IList),例如 List 可以 从 JSON 数组反序列化。也可以添加 JsonArrayAttribute 强制它从 JSON 数组反序列化的类型。小路 '', 第 1 行,位置 1。
【问题讨论】:
-
您的 JSON 表示一个数组 - 它以
[开头并以]结尾。您正在尝试将其反序列化为单个RootObject。要么去掉开头和结尾的方括号,要么反序列化为List<RootObject>。 -
@JonSkeet 我更改为 List
但我仍然收到异常“System.FormatException:'输入字符串格式不正确。' .". -
@Simant:我无法重现。使用您的确切类和 JSON,它可以很好地解析。不知道除了somewhere 之外的任何东西,很难进一步提供帮助。 (也许那是在单独的一段代码中?)
-
var json = "[{\"detectedLanguage\":{\"language\":\"en\",\"score\":0},\"translations\":[{\"text\":\"\",\"to\":\"da\"},{\"text\":\"\",\"to\":\"da\"}]}]"; var result = JsonConvert.DeserializeObject<List<RootObject>>(json);工作正常 -
@IvanSalo 我正在获取 json [{\"detectedLanguage\":{\"language\":\"en\",\"score\":0.0},\"translations\" :[{\"text\":\"\",\"to\":\"da\"}]}] 与你的类似。
标签: c# serialization json.net json-deserialization