我有一个JSON字符串。
[
{
"target":"FDOL00001",
"datapoints":[
{
"y":72.564,
"x":1523858700
}
]
},
{
"target":"FDOL00001",
"datapoints":[
{
"y":86.366,
"x":1523858700
}
]
},
{
"target":"FDOL00001",
"datapoints":[
{
"y":73.90195818815343,
"x":1523858700
}
]
}
]
我正在尝试将其反序列化为集合。但是我收到了一个错误。有人可以指导我以正确的方式解决这个问题吗?
class datapoint
{
[JsonProperty("x")]
public int x { get; set; }
[JsonProperty("y")]
public decimal y { get; set; }
}
class jsonMapper
{
[JsonProperty("target")]
public string target { get; set; }
[JsonProperty("datapoints")]
public datapoint datapoints { get; set; }
}
我正在尝试使用以下代码进行转换。
var json = JsonConvert.DeserializeObject<List<jsonMapper>>(objText);
我得到的错误是
无法将当前JSON数组(例如[1,2,3])反序列化为“ISSPortal2.datapoint”类型,因为该类型需要一个JSON对象(例如{\“name \”:\“value \”})来正确反序列化。\ r \ n要修复此错误要么将JSON更改为JSON对象(例如{\“name \”:\“value \”}),要么将反序列化类型更改为数组或实现集合接口的类型(例如ICollection,IList)就像可以从JSON数组反序列化的List。 JsonArrayAttribute也可以添加到类型中以强制它从JSON数组反序列化。\ r \ nPath'[0] .datapoints',第1行,第40位。
我已经检查了this。但它不起作用。 我的代码有什么问题。请帮我识别一下。在此先感谢:)
答案 0 :(得分:1)
您需要将datapoints
声明为某种类型的集合(例如IEnumerable
或IList
)
class jsonMapper
{
[JsonProperty("target")]
public string target { get; set; }
// This has changed to IEnumerable<datapoint>
[JsonProperty("datapoints")]
public IEnumerable<datapoint> datapoints { get; set; }
}
答案 1 :(得分:1)
您正尝试将数组datapoint[]
反序列化为datapoint
。
更改
public datapoint datapoints { get; set; }
要
public datapoint[] datapoints { get; set; }
加分: C#命名约定,建议您在公共财产中使用大写字母。
class Datapoint
{
[JsonProperty("x")]
public int X { get; set; }
[JsonProperty("y")]
public decimal Y { get; set; }
}
class JsonMapper
{
[JsonProperty("target")]
public string Target { get; set; }
[JsonProperty("datapoints")]
public Datapoint Datapoints { get; set; }
}
答案 2 :(得分:0)
你的课程应该是这样的:
public class datapoint
{
[JsonProperty("x")]
public int x { get; set; }
[JsonProperty("y")]
public decimal y { get; set; }
}
public class jsonMapper
{
[JsonProperty("target")]
public string target { get; set; }
[JsonProperty("datapoints")]
public List<datapoint> datapoints { get; set; }
}
答案 3 :(得分:0)
在datapoints
上的json字符串中,每个jsonMapper
对象的属性都包含在方括号([]
)中,然后datapoints
被解释为集合对象而不是单个对象。
你的jsonMapper类是
class jsonMapper
{
[JsonProperty("target")]
public string target { get; set; }
[JsonProperty("datapoints")]
public datapoint datapoints { get; set; }
}
和datapoints
属性不是数组或任何集合对象。
您可以将您的财产从public datapoint datapoints { get; set; };
更改为
public List<datapoint> datapoints { get; set; };
或者您可以从json字符串中删除方括号([]
)。