如何解析此JSON
使用Newton Soft
我试过但是给了我null因为我的模态应该有1,2,3级...... 但那很有活力。让人感到困惑。
感谢您的帮助!
{
"data": {
"1": {
"test": {
"col1": "123",
"col2": "name"
}
},
"2": {
"test": {
"col1": "345",
"col2": "name2"
}
},
"3": {
"test": {
"col1": "456",
"col2": "name3"
}
}
}
class root
{
data data{get; set;};
}
class data
{
List<object> innerObject {get; set;} //not sure as labels are dynamic
}
class test
{
col1{get; set;}
col2{get; set;}
} //Calling it in that way ..
root r = JsonConvert.DeserializeObject<root>(result);
答案 0 :(得分:0)
您可以使用字典来解析具有自定义属性名称的JSON对象:
Dim stopCBEvents As Boolean
Private Sub ComboBox21_Change()
If Not stopCBEvents Then
With ComboBox21
'MsgBox .Value
If IsNumeric(.Value) Then
stopCBEvents = True
.Value = Application.Text(--.Value, "hh:mm:ss.000")
stopCBEvents = False
End If
End With
End If
End Sub
如果您确定字典键将始终为数字,则可以使用整数键,并使用SortedDictionay
对值进行排序:
public class Test
{
public string col1 { get; set; }
public string col2 { get; set; }
}
public class DataValue
{
public Test test { get; set; }
}
public class RootObject
{
public RootObject() { this.data = new Dictionary<string, DataValue>(); }
public Dictionary<string, DataValue> data { get; set; }
}
答案 1 :(得分:0)
@dbc's answer是个不错的选择,但您还有其他一些选择:
如果您可以控制正在生成的JSON,请尽可能使用数组让您的生活更轻松。看起来你真正想要的是这个:
{
"data": [{
"test": {
"col1": "123",
"col2": "name"
}, {
"test": {
"col1": "345",
"col2": "name2"
}, /* etc */
]
}
这样,data
表示一个数组,您可以将其反序列化:
class Root
{
List<Data> Data { get; set; };
}
class Data
{
Test Test { get; set; }
}
JsonConvert.DeserializeObject<Root>(json);
您可以使用自定义转换器将JSON强制转换为数组结构。这对你的JSON做了很多假设。例如,假设您有一个带整数键的对象,数字之间没有空格:
public class ObjectAsArrayConverter : JsonConverter
{
public override bool CanConvert(Type type)
{
return
type.IsGenericType &&
typeof(List<>) == type.GetGenericTypeDefinition() &&
typeof(Data) == type.GetGenericArguments()[0];
}
public override object ReadJson(
JsonReader reader,
Type objectType,
object existingValue,
JsonSerializer serializer)
{
JObject obj = JObject.ReadFrom(reader).ToObject<JObject>();
return obj.Properties()
.Select(p => new { Index = int.Parse(p.Name), Value = obj[p.Name].ToObject<Data>() })
.OrderBy(p => p.Index)
.Select(p => p.Value)
.ToList();
}
public override void WriteJson(
JsonWriter writer,
object value,
JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
这将允许您将JSON反序列化为此结构:
class Root
{
public List<Data> Data {get; set;}
}
class Data
{
public Test Test { get; set; }
}
class Test
{
public string Col1 {get; set;}
public string Col2 {get; set;}
}
您可能需要调整第二个建议,例如,如果您希望数组稀疏,则可能需要使代码期望。