C# 如何解析具有属性d的复杂json
我在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} 这是我使用的第一类:-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
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;
}