完成反序列化对象后在json字符串中找到的附加文本

时间:2013-10-29 14:01:01

标签: c# .net json

这个问题已在这里被问过几次,但仍有一些情况它不起作用。

我正在使用JSON.net读取json数据,并希望将json数据读入数据集。我有以下json数据字符串(它可能更复杂,可以嵌套到多个级别)

[{"timestamp": 1383033661,
  "base": "USD",
  "rates" : {
  "AED": 3.673136,
  "AFN": 56.962675,
  "ALL": 101.792499,
  "AMD": 409.561999, 
  "YER": 215.109837,
  "ZAR": 9.851868,
  "ZMK": 5230.441665,
  "ZMW": 5.395017,
  "ZWL": 322.355006}}]

我正在尝试使用以下方法将其读入数据集:

DataSet currency = (DataSet)JsonConvert.DeserializeObject(json, (typeof(DataSet)));

但它引发了异常:

"Additional text found in json string after finishing deserializing object"

注意:我尝试将单级json数据转换为数据表并且已成功转换但是当我尝试将其转换为数据集时,它再次失败并且上面给出的异常相同。

有谁能请对上述异常和解决方案有所了解吗?

1 个答案:

答案 0 :(得分:1)

您需要一个类似于

的结构
public class Rate
{
    public string TimeSpan { get; set; }
    public string Base { get; set; }
    Dictionary<string, string> Rates { get; set; }
}

rates是json数组中的另一个json对象。

const string json = @"{
  ""timestamp"": 1383033661,
  ""base"": ""USD"",
  ""rates"" : {
      ""AED"": 3.673136,
      ""AFN"": 56.962675,
      ""ALL"": 101.792499,
      ""AMD"": 409.561999, 
      ""YER"": 215.109837,
      ""ZAR"": 9.851868,
      ""ZMK"": 5230.441665,
      ""ZMW"": 5.395017,
      ""ZWL"": 322.355006
   }
}";

Rate currency = (Rate)JsonConvert.DeserializeObject(json, (typeof(Rate)));