将数据表字符串从 Azure ML WS 转换为实际的数据表 C# 对象?
Convert a datatable string from Azure ML WS to an actual Datatable C# Object?
基本上我从我的 azure ws 输出中收到这样的输出:
{
'Results': {
'WSOutput': {
'type': 'table',
'value': {
'ColumnNames': ['ID', 'Start', 'Ask', 'Not', 'Passed', 'Suggest'],
'ColumnTypes': ['Int32', 'Int32', 'Int32', 'Double', 'Int64', 'Int32'],
'Values': [['13256025', '25000', '19000', '0.35', '1', '25000']]
}
}
}
}
如您所见,该字符串包含创建数据表对象的信息。现在,我似乎找不到将其转换为实际数据表 POCO 的简单方法。我可以使用 Newtonsoft.Json.Linq 手动编写解析器代码,但必须有更简单的方法。
有人知道怎么做吗?我似乎在网上找不到任何东西。
是的,网上有一个开源在线生成器 (http://jsonutils.com/)。复制粘贴你的结果会给你:
public class Value
{
public IList<string> ColumnNames { get; set; }
public IList<string> ColumnTypes { get; set; }
public IList<IList<string>> Values { get; set; }
}
public class WSOutput
{
public string type { get; set; }
public Value value { get; set; }
}
public class Results
{
public WSOutput WSOutput { get; set; }
}
public class Example
{
public Results Results { get; set; }
}
我正在回答我自己的问题,尽管马丁的应该是被接受的那个。
我最终像这样编写了我自己的可怕变压器:
var parsedJson = JObject.Parse(jsonn);
var length = parsedJson["Results"]["WSOutput"]["value"]["Values"][0].Count();
IDictionary<string, object> flexibleJson = new ExpandoObject();
for (int i = 0; i < length; i++)
{
string colName = parsedJson["Results"]["WSOutput"]["value"]["ColumnNames"][i].ToString();
string colValue = parsedJson["Results"]["WSOutput"]["value"]["Values"][0][i].ToString(); // single result for now
flexibleJson.Add(colName, colValue);
}
var serialized = JsonConvert.SerializeObject(flexibleJson);
然后使用它,您可以使用 json.net 将其反序列化为数据表 =)
基本上我从我的 azure ws 输出中收到这样的输出:
{
'Results': {
'WSOutput': {
'type': 'table',
'value': {
'ColumnNames': ['ID', 'Start', 'Ask', 'Not', 'Passed', 'Suggest'],
'ColumnTypes': ['Int32', 'Int32', 'Int32', 'Double', 'Int64', 'Int32'],
'Values': [['13256025', '25000', '19000', '0.35', '1', '25000']]
}
}
}
}
如您所见,该字符串包含创建数据表对象的信息。现在,我似乎找不到将其转换为实际数据表 POCO 的简单方法。我可以使用 Newtonsoft.Json.Linq 手动编写解析器代码,但必须有更简单的方法。
有人知道怎么做吗?我似乎在网上找不到任何东西。
是的,网上有一个开源在线生成器 (http://jsonutils.com/)。复制粘贴你的结果会给你:
public class Value
{
public IList<string> ColumnNames { get; set; }
public IList<string> ColumnTypes { get; set; }
public IList<IList<string>> Values { get; set; }
}
public class WSOutput
{
public string type { get; set; }
public Value value { get; set; }
}
public class Results
{
public WSOutput WSOutput { get; set; }
}
public class Example
{
public Results Results { get; set; }
}
我正在回答我自己的问题,尽管马丁的应该是被接受的那个。
我最终像这样编写了我自己的可怕变压器:
var parsedJson = JObject.Parse(jsonn);
var length = parsedJson["Results"]["WSOutput"]["value"]["Values"][0].Count();
IDictionary<string, object> flexibleJson = new ExpandoObject();
for (int i = 0; i < length; i++)
{
string colName = parsedJson["Results"]["WSOutput"]["value"]["ColumnNames"][i].ToString();
string colValue = parsedJson["Results"]["WSOutput"]["value"]["Values"][0][i].ToString(); // single result for now
flexibleJson.Add(colName, colValue);
}
var serialized = JsonConvert.SerializeObject(flexibleJson);
然后使用它,您可以使用 json.net 将其反序列化为数据表 =)