Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何解析具有属性d的复杂json_C#_Json_Windows Phone 7_Windows Phone 8_Json.net - Fatal编程技术网

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

C# 如何解析具有属性d的复杂json,c#,json,windows-phone-7,windows-phone-8,json.net,C#,Json,Windows Phone 7,Windows Phone 8,Json.net,我在windows phone 8中使用C#反序列化JSON时遇到问题请帮助我这样做:- 这是我得到的JSON结果:- {“d”:“{“滴答声时间”:“29/04/2014 19:13:41\”,“符号”:[{“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} 这是我使用的第一类:- public class O

我在windows phone 8中使用C#反序列化JSON时遇到问题请帮助我这样做:-

这是我得到的JSON结果:-

{“d”:“{“滴答声时间”:“29/04/2014 19:13:41\”,“符号”:[{“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}

这是我使用的第一类:-

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;
} 
公共类outErrorObject
{
公共字符串d{get;set;}
}
公共类根对象
{
公共日期时间时间{get;set;}
公共列表符号{get;set;}
}
公开课成绩
{
公共整数I{get;set;}
公共双精度A{get;set;}
公共双B{get;set;}
公共双H{get;set;}
公共双L{get;集合;
} 
我用这段代码反序列化了这个JSON,但它不起作用,因为在外部根结果中是时间值和符号数组,我不知道如何同时解析它们

var outerRoot = JsonConvert.DeserializeObject<OuterRootObject>(My JSON);
var root = JsonConvert.DeserializeObject<RootObject>(outerRoot.d);
var outerRoot=JsonConvert.DeserializeObject(我的JSON);
var root=JsonConvert.DeserializeObject(outErrorot.d);

我可以让您的代码进行两项更改

  • 我将
    Symbols
    属性更改为保存
    列表而不是
    列表
    ,因为您没有定义我可以看到的
    Symbols
    类,并且
    结果
    类似乎与JSON匹配
  • 我使用带有自定义日期格式的
    IsoDateTimeConverter
    来处理
    TickTime
    ,因为JSON中的日期不符合JSON.Net所期望的标准ISO 8601日期时间格式
  • 以下是完整的代码:

    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; }
    }
    

    这项工作100%只需更改

    public DateTime 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;
                                 }
    
    var outerRoot=JsonConvert.DeserializeObject(您的JSON);
    var root=JsonConvert.DeserializeObject(outErrorot.d);
    foreach(root.Symbols中的var SymbolsInfo)
    {
    变量i=符号信息i;
    变量a=符号信息a;
    var b=符号信息b;
    var l=符号信息.l;
    var h=符号信息.h;
    }
    
    Symbols
    类是什么样子的?它的数组列表:(它很复杂,我不知道如何实现它。由于一小时前的编辑,我正在重新打开它。这试图提供有关您尝试的内容以及您认为它不起作用的原因的信息。现在可能有人能够回答它。
    public string TickTime { get; set; }
    
    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;
                                 }