var test = {'abc':76,'data':'[6435,3310,56.06875]'}
如何将上面的json字符串转换为对象说:
class item
{
public string abc {Get;set;}
public float[] data {get;set}
}
我试过了
JsonConvert.DeserializeObject<item>(test);
但得到这个错误:
{"Error converting value \"[6435,3310]\" to type 'System.Single[]'. Path 'data', line 1, position 117."}
答案 0 :(得分:0)
json字符串存在一些问题(假设您使用的是C#)。 data
属性的第一个值实际上是一个字符串(给定引号)。这就是你收到错误的原因。
您可以做的是创建一个属性来保存字符串,然后创建另一个属性来解析解析后的float
值。这是通过使用JsonProperty
和JsonIgnore
的一些JSON.Net属性来完成的。这些属性告诉序列化程序json字符串中的属性名称以及要忽略的属性。
class Foo
{
string dataString;
float[] data = null;
[JsonProperty("abc")]
public string Abc { get; set; }
[JsonProperty("data")]
public string DataString
{
get { return dataString; }
set
{
data = null;
dataString = value;
}
}
[JsonIgnore]
public float[] Data
{
get
{
if (data != null)
return data;
return data = dataString != null ? JsonConvert.DeserializeObject<float[]>(DataString) : null;
}
set
{
DataString = value == null ? null : JsonConvert.SerializeObject(value);
}
}
}
这看起来很多代码但是使用支持字段允许您更改Data
字段和DataString
字段,同时维护一个正常工作的序列化程序。
然后使用
简单地调用它var i = JsonConvert.DeserializeObject<Foo>(test);
答案 1 :(得分:0)
这可能会为你做到这一点
string jsn = @"{'abc':76,'data':'[6435,3310,56.06875]'}";
jsn = jsn.Replace("'[", "[");
jsn = jsn.Replace("]'", "]");
var ser = JsonConvert.DeserializeObject<ClsResult>(jsn);
我使用了replace,因为'data':'[6435,3310,56.06875]'
正在将数据数组转换为字符串。所以我们更好地使它成为'data':[6435,3310,56.06875]
,然后你的类看起来像
public class ClsResult
{
[JsonProperty("abc")]
public int abc { get; set; }
[JsonProperty("data")]
public IList<double> data { get; set; }
}