【问题标题】:C# JObject parsingC# JObject 解析
【发布时间】:2017-01-13 02:09:15
【问题描述】:

如何解析这个json对象???

{{
    "track": "t1",
    "category": {
        "c1": {
            "skills": [
                "s1"
             ]
        },
        "c2": {
            "skills": [
                "s1",
                "s2"
             ]
        }
    }
}}

这是我迄今为止尝试过的,但我不明白如何在 c# 中执行此操作。 这是我第一次做 c# 项目,但仍然无法从 JAVA 迁移到 C#

[HttpPost]
[Route("api/TCSAPI/SaveTCS")]
public HttpResponseMessage SaveTCS([FromBody] dynamic tcsObject)
{
    JToken token = JObject.Parse(tcsObject.ToString());

    string track = token.SelectToken("track").ToString();
    List<JToken> category = token.SelectToken("category").ToList();
    foreach (var cat in category) {
        var data = cat;
        // dont know after this
    }

    return Helper.ComposeResponse(HttpStatusCode.OK, string.Empty);
}

【问题讨论】:

    标签: c# json parsing json.net


    【解决方案1】:

    JSON 的问题是 {{}} 所以你需要修剪 JSON 字符串以使其成为 {}

    string jsonstr = File.ReadAllText(YourJSONFile);
    jsonstr = jsonstr.Replace("{{", "{");
    jsonstr = jsonstr.Replace("}}", "}");
    

    然后您可以安装Newtonsoft JSON 来反序列化 JSON。

    你的班级结构看起来像这样

    public class C1
    {
        public List<string> skills { get; set; }
    }
    
    public class C2
    {
        public List<string> skills { get; set; }
    }
    
    public class Category
    {
        public C1 c1 { get; set; }
        public C2 c2 { get; set; }
    }
    
    public class DataItem
    {
        public string track { get; set; }
        public Category category { get; set; }
    }
    

    然后你可以像这样反序列化它

    var ser = JsonConvert.DeserializeObject<DataItem>(jsonstr);
    

    编辑

    由于 C1 和 C2 是动态的,您可以使用这样的类

    public class SomeCat
    {
        public List<string> skills
        {
            get;
            set;
        }
    }
    public class DataItem
    {
        public string track
        {
            get;
            set;
        }
        public Dictionary<string, SomeCat> Category
        {
            get;
            set;
        }
    }
    

    并像

    一样反序列化它
    string jsonstr = File.ReadAllText(YourJSON);
    jsonstr = jsonstr.Replace("{{", "{");
    jsonstr = jsonstr.Replace("}}", "}");
    var ser = JsonConvert.DeserializeObject<DataItem>(jsonstr);
    

    查看数据外观的屏幕截图,您可以使用索引访问它。

    【讨论】:

    • c1 和 c2 是动态的 - 意味着它并不总是 c1 或 c2,因为它是我在文本框中输入的内容的基础。同样,当我使用 json.GetType() 时,我得到了一种类型的作业。
    • 非常感谢。另一个问题如何访问var ser 中的数据?它说数据类型是动态的
    猜你喜欢
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多