将Json模式反序列化为Json字符串或对象

时间:2015-12-02 09:47:44

标签: c# json json.net

我有一个json架构,我需要将它转换为C#对象或至少转换为json字符串。

有什么办法可以通过代码或使用某种工具来实现吗?

对于Json我目前正在使用Json.net

这是我的架构之一:

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "UserGroupWsDTO",
  "type": "object",
  "properties":
  {
    "members":
    {
      "type": "array",
      "items":
      {
        "type": "object",
        "properties":
        {
          "uid":
          {
            "type": "string"
          }
        }
      }
    },
    "uid":
    {
      "type": "string"
    },
    "name":
    {
      "type": "string"
    }
  }
}

我需要这个来创建一个用于反序列化json的对象

修改 我的Json架构版本是4,而POCO的JSON Schema不支持它

2 个答案:

答案 0 :(得分:1)

查看支持v3 JSON的JSON Schema to POCO

答案 1 :(得分:0)

如果您只是“浏览”key-values,那么您不需要任何额外的库...

只是这样做:

var obj = (JObject)JsonConvert.DeserializeObject(json);

var dict = obj.First.First.Children().Cast<JProperty>()
            .ToDictionary(p => p.Name, p =>p.Value);

var dt =  (string)dict["title"];

但是如果您需要字符串的对象,那么定义一个类并将该字符串反序列化为该类...请按照以下示例:

首先定义类:

public class Uid
{
    public string type { get; set; }
}

public class Properties2
{
    public Uid uid { get; set; }
}

public class Items
{
    public string type { get; set; }
    public Properties2 properties { get; set; }
}

public class Members
{
    public string type { get; set; }
    public Items items { get; set; }
}

public class Uid2
{
    public string type { get; set; }
}

public class Name
{
    public string type { get; set; }
}

public class Properties
{
    public Members members { get; set; }
    public Uid2 uid { get; set; }
    public Name name { get; set; }
}

public class RootObject
{
    public string __invalid_name__$schema { get; set; }
    public string title { get; set; }
    public string type { get; set; }
    public Properties properties { get; set; }
}

这是实施:

 string json = @"{...use your json string here   }";

    RootObject root = JsonConvert.DeserializeObject<RootObject>(json);

    Console.WriteLine(root.title);
    // UserGroupWsDTO