我正在尝试将JSON数组转换为Object。这是一种被黑客攻击的方式,但足以达到我的目的。
基本上我正在写一个方法来获得这个
var data = [{
"MonthYearShortName": "Sep-13",
"TotalCustomers": 1905.0,
"Aquisition": 317.0,
"Attrition": 9.0
}, {
"MonthYearShortName": "FY-14",
"TotalCustomers": 2158.0,
"Aquisition": 401.0,
"Attrition": 15.0909090909091
}]
这样的事情
data = [{
key: 'Attrition',
color: '#d62728',
values: [{
"label": "Sep-13",
"value": 9
}, {
"label": "FY-14",
"value": 15.0909090909091
}]
},
{
key: 'Total Customer',
color: '#1f77b4',
values: [{
"label": "Sep-13",
"value": 1905
}, {
"label": "FY-14",
"value": 2158
}]
},
{
key: 'Aquisition',
color: '#1f7774',
values: [{
"label": "Sep-13",
"value": 317
}, {
"label": "FY-14",
"value": 401
}]
}
];
现在颜色将是静态的。我稍后会处理它。
现在开始以我的黑客方式得到这个(我知道这很粗糙)
我试过这样的事情来解决这个问题
var data = @"[{""MonthYearShortName"": ""Sep-13"",""TotalCustomers"": 1905.0,""Aquisition"": 317.0,""Attrition"": 9.0}, {""MonthYearShortName"": ""FY-14"",""TotalCustomers"": 2158.0,""Aquisition"": 401.0,""Attrition"": 15.0909090909091}]";
JArray a = JArray.Parse(data);
var label1 = a[0]["MonthYearShortName"].ToString();
var label2 = a[1]["MonthYearShortName"].ToString();
var totalCustomer1 = a[0]["TotalCustomers"].ToString();
var totalCustomer2 = a[1]["TotalCustomers"].ToString();
var aquisition1 = a[0]["Aquisition"].ToString();
var aquisition2 = a[1]["Aquisition"].ToString();
var attrition1 = a[0]["Attrition"].ToString();
var attrition2 = a[1]["Attrition"].ToString();
JObject rss1 =
new JObject(
new JProperty("channel",
new JObject(
new JProperty("Key", "Attrition"),
new JProperty("color", "#d62728"),
new JProperty("values",
new JArray(
from p in a
select new JObject(
new JProperty("label", a[0]["MonthYearShortName"].ToString()),
new JProperty("value", attrition1),
new JProperty("label", a[1]["MonthYearShortName"].ToString()),
new JProperty("value", attrition2)))))));
当我尝试这个时,我得到了一个
Can not add property label to Newtonsoft.Json.Linq.JObject. Property with the same name already exists on object.
现在如果有人可以建议一种更清洁的方式(因为我现在无法想到),我会很高兴,或者如果我的代码可以纠正,那将会有所帮助。
由于
答案 0 :(得分:1)
你能尝试这样做吗?
[Test]
public void Test()
{
var data = @"[
{'MonthYearShortName': 'Sep-13','TotalCustomers': 1905.0,'Aquisition': 317.0,'Attrition': 9.0},
{'MonthYearShortName': 'FY-14','TotalCustomers': 2158.0,'Aquisition': 401.0,'Attrition': 15.0909090909091}
]";
dynamic jarr = JArray.Parse(data);
var attritions = new List<ExpandoObject>();
var aquisitions = new List<ExpandoObject>();
var totalCustomers = new List<ExpandoObject>();
foreach (dynamic o in jarr)
{
dynamic attr = new ExpandoObject();
attr.label = o.MonthYearShortName;
attr.value = o.Attrition;
attritions.Add(attr);
dynamic acq = new ExpandoObject();
acq.label = o.MonthYearShortName;
acq.value = o.Aquisition;
aquisitions.Add(acq);
dynamic cust = new ExpandoObject();
cust.label = o.MonthYearShortName;
cust.value = o.TotalCustomers;
totalCustomers.Add(acq);
}
dynamic attrition = new ExpandoObject();
dynamic aquisition = new ExpandoObject();
dynamic totalCustomer = new ExpandoObject();
attrition.Key = "Attrition";
attrition.Color = "#d62728";
attrition.Values = attritions;
aquisition.Key = "Acquisition";
aquisition.Color = "#1f7774";
aquisition.Values = aquisitions;
totalCustomer.Key = "Total Customer";
totalCustomer.Color = "#1f77b4";
totalCustomer.Values = totalCustomers;
var result = new[] { attrition,totalCustomer, aquisition };
var resultString = JsonConvert.SerializeObject(result, Formatting.Indented);
Console.Write(resultString);
}