JSON解析失败,该如何解析生成实体类?

CN_Azure 2017-12-14 03:25:55
json:



{
"daysdata": {
"1": {
"date": "2017-12-13",
"count": 176,
"rate": 0
},
"2": {
"date": "2017-12-12",
"count": 119,
"rate": 0
},
"3": {
"date": "2017-12-11",
"count": 99,
"rate": 0
},
"4": {
"date": "2017-12-10",
"count": 56,
"rate": 0
},
"5": {
"date": "2017-12-09",
"count": 73,
"rate": 0
},
"6": {
"date": "2017-12-08",
"count": 149,
"rate": 0
},
"7": {
"date": "2017-12-07",
"count": 230,
"rate": 0
}
}
}

...全文
248 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
指尖魔术师 2017-12-14
  • 打赏
  • 举报
回复
其实没必要在定义什么结构对应的类,c#4以上自带dynamic类型可以直接解决这个问题。 public class Json { static private readonly String strJson = "{\"daysdata\":{\"1\":{\"date\":\"2017-12-13\",\"count\":176,\"rate\":0},\"2\":{\"date\":\"2017-12-12\",\"count\":119,\"rate\":0},\"3\":{\"date\":\"2017-12-11\",\"count\":99,\"rate\":0},\"4\":{\"date\":\"2017-12-10\",\"count\":56,\"rate\":0},\"5\":{\"date\":\"2017-12-09\",\"count\":73,\"rate\":0},\"6\":{\"date\":\"2017-12-08\",\"count\":149,\"rate\":0},\"7\":{\"date\":\"2017-12-07\",\"count\":230,\"rate\":0}}}"; static public void Test() { dynamic root = JsonConvert.DeserializeObject(strJson); foreach (JProperty prop in root.daysdata) { Console.WriteLine(prop.Name); Console.WriteLine(prop.Value); Console.WriteLine(prop.Value["date"]); } Console.ReadKey(); } }
正怒月神 版主 2017-12-14
  • 打赏
  • 举报
回复
引用 2 楼 CN_Azure 的回复:
谢谢版主回答. 上面是个只例子,如果不止7条数据呢.就是不想生成那么多类才考虑有什么其他的办法.而且数据也是变化的,不只是1-7.
那就用dictionary,楼上给出示例了。
by_封爱 2017-12-14
  • 打赏
  • 举报
回复
dic类型啊
全栈极简 2017-12-14
  • 打赏
  • 举报
回复
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string str = "{\"daysdata\": {\"1\": {\"date\": \"2017-12-13\",\"count\": 176,\"rate\": 0},\"2\": {\"date\": \"2017-12-12\",\"count\": 119,\"rate\": 0},\"3\": {\"date\": \"2017-12-11\",\"count\": 99,\"rate\": 0},\"4\": {\"date\": \"2017-12-10\",\"count\": 56,\"rate\": 0},\"5\": {\"date\": \"2017-12-09\",\"count\": 73,\"rate\": 0},\"6\": {\"date\": \"2017-12-08\",\"count\": 149,\"rate\": 0},\"7\": {\"date\": \"2017-12-07\",\"count\": 230,\"rate\": 0}}}";

Data data = JsonConvert.DeserializeObject<Data>(str);
foreach (var key in data.daysdata.Keys)
{
InnerData innerData = data.daysdata[key];
Console.WriteLine("{0} {1} {2} {3}", key,innerData.date, innerData.count, innerData.rate);
}
}
}

public class Data
{
public Dictionary<string, InnerData> daysdata { get; set; }
}

public class InnerData
{
public string date { get; set; }
public int count { get; set; }
public int rate { get; set; }
}
}


  • 打赏
  • 举报
回复
引用 2 楼 CN_Azure 的回复:
谢谢版主回答. 上面是个只例子,如果不止7条数据呢.就是不想生成那么多类才考虑有什么其他的办法.而且数据也是变化的,不只是1-7.
如果用类读取找到最多的就行,不存在的列数据是null。 如果用dictionary的话就直接对列名就行。
CN_Azure 2017-12-14
  • 打赏
  • 举报
回复
谢谢版主回答. 上面是个只例子,如果不止7条数据呢.就是不想生成那么多类才考虑有什么其他的办法.而且数据也是变化的,不只是1-7.
正怒月神 版主 2017-12-14
  • 打赏
  • 举报
回复
static void Main(string[] args)
        {
            string json = "你的json";

            Rootobject q = JsonConvert.DeserializeObject<Rootobject>(json);

            Console.ReadLine();
        }

        public class Rootobject
        {
            public Daysdata daysdata { get; set; }
        }

        public class Daysdata
        {
            public _1 _1 { get; set; }
            public _2 _2 { get; set; }
            public _3 _3 { get; set; }
            public _4 _4 { get; set; }
            public _5 _5 { get; set; }
            public _6 _6 { get; set; }
            public _7 _7 { get; set; }
        }

        public class _1
        {
            public string date { get; set; }
            public int count { get; set; }
            public int rate { get; set; }
        }

        public class _2
        {
            public string date { get; set; }
            public int count { get; set; }
            public int rate { get; set; }
        }

        public class _3
        {
            public string date { get; set; }
            public int count { get; set; }
            public int rate { get; set; }
        }

        public class _4
        {
            public string date { get; set; }
            public int count { get; set; }
            public int rate { get; set; }
        }

        public class _5
        {
            public string date { get; set; }
            public int count { get; set; }
            public int rate { get; set; }
        }

        public class _6
        {
            public string date { get; set; }
            public int count { get; set; }
            public int rate { get; set; }
        }

        public class _7
        {
            public string date { get; set; }
            public int count { get; set; }
            public int rate { get; set; }
        }

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧