如何解析具有属性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);

如何解析具有属性d的复杂json

这个工作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;
                             }

我能够让您的代码使用两个更改。

  1. 我将Symbols属性更改为包含List<Result>而不是List<Symbols>,因为您没有定义我可以看到的Symbols类,而且Result类似乎与JSON匹配
  2. 我使用了具有自定义日期格式的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