我几天来一直在为这个问题而烦恼,没有希望了。我还处于学习C#的早期阶段,所以如果我的解释或理解不足,请原谅。
我的方案是我需要访问API并将数据下载为JSON,然后将其反序列化为类。目前,工作正常,但每个变量都定义为String,这意味着我需要不断转换和操作应该是int / double的数据,因为API可以提供" N / A&#34 ;对于这些数据。我得到的印象是依赖于一切都是字符串是不好的做法。
那我应该怎么实现呢?我需要能够将数据存储为正确的类型,同时请记住它可能是错误的。
类型错误的属性示例
public string Title { get; set; }
public string Year { get; set; } // Wanted int. Often has an end year "2010-2014"
public string Metascore { get; set; } // Wanted double. Could be "N/A"
我能想象解决这个问题的唯一方法就是有两个类:第一个是原始的字符串类,然后第二个类是一个几乎相同的类,它具有使用原始数据的所需属性然后转换它
我的问题是该类已经有几十个属性,因此复制它似乎几乎和原始问题一样浪费。无论如何,我想知道未来使用的替代方案。
编辑: 发现了一个类似的问题here,但遗憾的是它并没有帮助。
答案 0 :(得分:1)
你可以将json反序列化为JObject
,然后加载你的自己
public class RootObject
{
public RootObject(JObject obj)
{
Title = obj["Title"].ToString();
var year = obj["year"].ToString();
Year = year == "N/A" ? 0 : int.Parse(year);
var metascore = obj["Metascore"].ToString();
Metascore = metascore == "N/A" ? 0 : int.Parse(metascore);
}
public string Title { get; set; }
public int Year { get; set; }
public double Metascore { get; set; }
}
static void Main(string[] args)
{
string json = "{\"Title\":\"test\",\"year\":\"2012\",\"Metascore\":\"N/A\"}";
RootObject root = new RootObject(JObject.Parse(json));
}