如何解析具有属性d的复杂json
本文关键字:复杂 json 属性 何解析 | 更新日期: 2023-09-27 18:00:40
我在windows phone 8中使用C#反序列化JSON时遇到问题,请帮助我完成:-
这是我得到的JSON结果:-
这是我使用的类:-
public class OuterRootObject
{
public string d { get; set; }
}
public class RootObject
{
public DateTime TickTime { get; set; }
public List<Symbols> Symbols{ get; set; }
}
public class Result
{
public int I { get; set; }
public double A { get; set; }
public double B { get; set; }
public double H { get; set; }
public double L{ get; set;
}
我已经用这段代码取消了这个JSON的rlize,但它不起作用,因为外部根结果内部是Time Value和Symbols数组,我不知道如何同时解析它们。
var outerRoot = JsonConvert.DeserializeObject<OuterRootObject>(My JSON);
var root = JsonConvert.DeserializeObject<RootObject>(outerRoot.d);
这个工作100%只是改变
public DateTime TickTime { get; set; }
至
public string TickTime { get; set; }
然后使用它来反序列化JSON
var outerRoot = JsonConvert.DeserializeObject<OuterRootObject>(your JSON);
var root = JsonConvert.DeserializeObject<RootObject>(outerRoot.d);
foreach (var SymbolsInfo in root.Symbols)
{
var i = SymbolsInfo .I;
var a = SymbolsInfo .A;
var b = SymbolsInfo .B;
var l = SymbolsInfo .L;
var h = SymbolsInfo .H;
}
我能够让您的代码使用两个更改。
- 我将
Symbols
属性更改为包含List<Result>
而不是List<Symbols>
,因为您没有定义我可以看到的Symbols
类,而且Result
类似乎与JSON匹配 - 我使用了具有自定义日期格式的
IsoDateTimeConverter
来处理TickTime
,因为JSON中的日期不符合JSON.Net所期望的标准ISO8601日期时间格式
这是完整的代码:
class Program
{
static void Main(string[] args)
{
string json = @"{""d"": ""{'""TickTime'"":'""29/04/2014 19:13:41'"",'""Symbols'"":[{'""I'"":61,'""H'"":0.8551,'""L'"":0.8516,'""A'"":0.855,'""B'"":0.8545},{'""I'"":62,'""H'"":1301.4,'""L'"":1286.3,'""A'"":1296.6,'""B'"":1296.4}]}""}";
IsoDateTimeConverter dateConverter = new IsoDateTimeConverter
{
DateTimeFormat = "dd/MM/yyyy HH:mm:ss"
};
var outerRoot = JsonConvert.DeserializeObject<OuterRootObject>(json);
var root = JsonConvert.DeserializeObject<RootObject>(outerRoot.d, dateConverter);
Console.WriteLine("TickTime: " + root.TickTime.ToString("dd-MMM-yyyy hh:mm:ss tt"));
foreach (Result r in root.Symbols)
{
Console.WriteLine("I: " + r.I);
Console.WriteLine("A: " + r.A);
Console.WriteLine("B: " + r.B);
Console.WriteLine("H: " + r.H);
Console.WriteLine("L: " + r.L);
Console.WriteLine();
}
}
}
public class OuterRootObject
{
public string d { get; set; }
}
public class RootObject
{
public DateTime TickTime { get; set; }
public List<Result> Symbols { get; set; }
}
public class Result
{
public int I { get; set; }
public double A { get; set; }
public double B { get; set; }
public double H { get; set; }
public double L { get; set; }
}
输出:
TickTime: 29-Apr-2014 07:13:41 PM
I: 61
A: 0.855
B: 0.8545
H: 0.8551
L: 0.8516
I: 62
A: 1296.6
B: 1296.4
H: 1301.4
L: 1286.3