将JSON文件导入C#对象时遇到问题

时间:2017-11-09 18:05:45

标签: c# json

我正在尝试将JSON文件导入C#中的对象(Mac上的VS 2017)以对其进行进一步操作。

我有这个JSON文件示例:

{
  "subdomain": "mycompany",
  "name": "MyCompany Inc",
  "website": "https://www.mycompany.com",
  "edition": "DIRECTORY",
  "licensing":
  {
    "apps":
    [
      "boxnet"
    ]
  },
  "admin": {
    "profile":
    {
      "firstName": "John",
      "lastName": "Smith",
      "email": "joe@mycompany.com",
      "login": "joe@mycompany.com",
      "mobilePhone": null
    },
    "credentials":
    {
      "password":
      {
        "value": "NotAPassword"},
        "recovery_question":
        {
          "question": "Best Solution",
          "answer": "MyOne"
        }
      }
    }
  }
}

所以我生成了一个C#库来创建一个要导入的对象类型:

using System;

namespace OrgCustom
{
    using System;
    using System.Net;
    using System.Collections.Generic;

    using Newtonsoft.Json;

    public class Licensing
    {
        public List<string> apps { get; set; }
    }

    public class Profile
    {
        public string firstName { get; set; }
        public string lastName { get; set; }
        public string email { get; set; }
        public string login { get; set; }
        public object mobilePhone { get; set; }
    }

    public class Password
    {
        public string value { get; set; }
    }

    public class RecoveryQuestion
    {
        public string question { get; set; }
        public string answer { get; set; }
    }

    public class Credentials
    {
        public Password password { get; set; }
        public RecoveryQuestion recovery_question { get; set; }
    }

    public class Admin
    {
        public Profile profile { get; set; }
        public Credentials credentials { get; set; }
    }

    public class Org
    {
        public string subdomain { get; set; }
        public string name { get; set; }
        public string website { get; set; }
        public string edition { get; set; }
        public Licensing licensing { get; set; }
        public Admin admin { get; set; }
    }
}

所以,我应该可以使用Newtownsoft.Json库轻松导入文件?

好吧,我的程序代码是:

using System;
using System.IO;
using System.Runtime.Serialization.Json;
using RestSharp;
using Newtonsoft.Json;
using OrgCustom;

namespace TestStart
{
    class Program
    {
        static void Main(string[] args)
        {
            string JSONstring = File.ReadAllText("CreateOrgExample.json");

            OrgCustom.Org objOrg = JsonConvert.DeserializeObject<OrgCustom.Org>(JSONstring);
            Console.WriteLine(objOrg.ToString());
        }
    }
}

问题在于,当我运行它时,我从Deserialize行得到一条消息,JsonConvert是一个类型,在给定的上下文中无效。

我在这里做错了什么?我在使用C#MVA课程的JSON简介中看到的这一行,我相信它应该有用吗?!?!

提前致谢,

QuietLeni

2 个答案:

答案 0 :(得分:1)

您的JSON在最后有一个额外的结束括号似乎是一个问题。因此,解析时可能会出错。

答案 1 :(得分:0)

我一眼就看不到语法错误。您可以检查程序集引用,然后使用global::限定符结合intellisense来深入查看转换调用(但同样看起来对我来说也是正确的。)

另外,您的Password类未定义JSON代码段中的RecoveryQuestion属性。

但这并不妨碍Newtonsoft将JSON片段反序列化为您已定义的结构。