使用Json.Net将一个JSON结构转换为另一个JSON结构

时间:2017-07-22 05:45:43

标签: c# json linq json.net

输入JSON:

{
    "name" : "objname",
    "abc" : 1,
    "def" : 2
}

所需的输出JSON:

{
    "objname" :
    {
        "abc" : 1,
        "def" : 2 
    }
}

我尝试如下所示,但我觉得这不是正确的方法。

// This is the class object
public class Obj
{
    public string Name { get;set;}
    public string abc { get; set; }
    public string def { get; set; }
}         

var obj = JsonConvert.DeserializeObject<Obj>(json);

StringBuilder sb = new StringBuilder();
sb.Append(" { ");
sb.AppendLine(obj.Name);
sb.AppendLine(" :  {");
sb.AppendLine(GetMemberName(() => obj.abc) + ":" + obj.abc + ",");
sb.AppendLine(GetMemberName(() => obj.def) + ":" + obj.abc);
sb.AppendLine(" :  }");

1 个答案:

答案 0 :(得分:2)

第一步是反序列化。你可以去一本字典:

Dictionary<string, string> dict = 
    JsonConvert.DeserializeObject<Dictionary<string, object>>(json);

然后,为了得到它,你可能也需要使用字典。您不能使用预定义的(甚至是编译器生成的)类,因为您不知道属性名称。

String name = (string)dict["name"];
// remove name from dictionary
dict.Remove(name);
var output = 
   new Dictionary<string,object>() {{name, dict}};

然后,将其保存回来:

string json = JsonConvert.SerializeObject(output);