如何反序列化多维JSON

插口

我知道人们像这样问过并且已经得到了非常类似的问题的答案,但是我仍然无法弄清楚我的问题。我有一个包含多维对象的JSON文件,如下所示:

{
      "Common": {
        "Required": "Required Entry ",
        "Photos": "Photos",
        "Videos": "Videos",
        "Register": "Register"
      },
      "Forms": {
        "Form": "Forms",
        "Name": "Name",
        "Phone": "Phone",
        "Email": "Email",
        "Message": "Message"
      },
      "Sections": {
        "Home": {
          "EventDateTime": "",
          "MainTitle": "",
          "SubTitle": ""
        },
        "About": {},
        "Venue": {},
        "Schedule": {},
        "Speakers": {},
        "Sponsors": {},
        "Price": {},
        "Contact": {}
      }
    }

我想将其反序列化到我的视图模型(LanguagesViewModel)中,如下所示:

[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
public class LanguagesViewModel
{
    public Common Common { get; set; }
    public Buttons Buttons { get; set; }
    public Forms Forms { get; set; }
    public Navbar Navbar { get; set; }
    public Sections Sections { get; set; }
}

public class Common
{
    public string Required { get; set; }
    public string Photos { get; set; }
    public string Videos { get; set; }
    public string Register { get; set; }
}

public class Forms
{
    public string Form { get; set; }
    public string Name { get; set; }
    public string Phone { get; set; }
    public string Email { get; set; }
    public string Message { get; set; }
}

public class Sections
{
    public Home Home { get; set; }
    public About About { get; set; }
    public Venue Venue { get; set; }
    public Schedule Schedule { get; set; }
    public Speakers Speakers { get; set; }
    public Sponsors Sponsors { get; set; }
    public Price Price { get; set; }
    public Contact Contact { get; set; }
}

public class Home
{
    public string EventDateTime { get; set; }
    public string MainTitle { get; set; }
    public string SubTitle { get; set; }
}

public class About
{

}

public class Venue
{

}

public class Schedule
{

}

public class Speakers
{

}

public class Sponsors
{

}

public class Price
{

}

public class Contact
{

}

}

一些片段可以做到这一点:

using (StreamReader sr = new StreamReader(language_file_path))
{
    string contents = sr.ReadToEnd();
    items = JsonConvert.DeserializeObject<LanguagesViewModel>(contents);
}

不知何故,我只能得到对象的第一层,即:

LanguagesViewModel{
    Common:null,
    Forms:null,
    Sections:null
}

不是第二级,不是第三级。我做错了什么还是错过了什么?非常感谢您提供任何帮助。

谢谢。

谢尔文·伊瓦里(Shervin Ivari)

您可以使用此静态类

public static class JsonHelper 
{
    public static T ToObject<T>(this string content)
    {
        var obj = JObject.Parse(content).GetValue(typeof(T).Name);

        if (obj == null)
            throw new NullReferenceException();
        else
            return obj.ToObject<T>();
        //This ToObject here is default method written in object
    }
}

用法

var mymodel= json.ToObject<Forms>();

或创建一个JSON对象并使用魔术字符串读取它。

//Creating your JSON object
JObject content = JObject.Parse(sr.ReadToEnd()//or your json);

//content["your object name"] let you access to you object
var common =(Common)content["Common"];

在多维对象中,您可以像这样访问它们。

 //content["level1"]["level2"]["level3"] & ...
 var sections= (Home)content["Sections"]["Home"];

同样,这种方式可能会起作用,但我更喜欢使用魔术弦的方式。

dynamic jsonObject = new JObject.Parse(sr.ReadToEnd());
var common = jsonObject.Common;

您可以在此链接中找到更多

我希望这有帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章