在C#中反序列化Json属性(Nested Json)为字符串。

问题描述 投票:0回答:1

我需要将Json反序列化为字符串,并在另一个Json中使用。我的Json字符串如下。

string testJson =
   "{
        "AssemblyName":"AssemplyName",
        "ClassName":"AssemplyName.ClassName",
        "Options":"{ "property1":"value1","property2":10}"
   }";

为了反序列化,我有如下的类。

public class CType
{
    public string AssemblyName { get; set; }
    public string ClassName { get; set; }
    public string Options { get; set; }
}

所以,我像下面这样反序列化。

CType cType = JsonConvert.DeserializeObject<CType>(testJson);

现在,我期望像下面这样的RESULI。

AssemblyName = "AssemplyName"
ClassName = "AssemplyName.ClassName"
Options = "{ "property1":"value1","property2":10}"

这将是非常感激任何人可以帮助这个

c# json deserialization jsonconvert
1个回答
2
投票

你可以像这样声明这个类。

public class Options
{
    public string property1 { get; set; }
    public string value1 { get; set; }
    public int property2 { get; set; }
}

public class Example
{
    public string AssemblyName { get; set; }
    public string ClassName { get; set; }
    public Options Options { get; set; }
}

然后你可以像这样反序列化和序列化字符串。

string str = "json string";
Example cType = JsonConvert.DeserializeObject<Example>(str);
string json = JsonConvert.SerializeObject(cType.Options);

有效的Json。

{
    "AssemblyName": "AssemplyName",
    "ClassName": "AssemplyName.ClassName",
    "Options": {
        "property1 ": "",
        "value1": "",
        "property2": 10
    }
}

对于动态嵌套的json,你可以这样声明。Options 作为字典。上面的代码可以工作。

public Dictionary<string, string> Options { get; set; }

1
投票

要从给定的json中读取选项,你需要使用以下方法去除额外的引号 TrimDeserializeObject

var cType = JsonConvert.DeserializeObject<CType>(testJson);
var options = JsonConvert.DeserializeObject<Dictionary<string, string>>(cType.Options.Trim('"'));

1
投票

假设你想把选项反序列化为一个字符串而不是一个字典--你需要修改json文件,并转义引号,就像下面这样。

{
"AssemblyName": "AssemplyName",
"ClassName": "AssemplyName.ClassName",
"Options": "
\"property1\":\"value1\",
\"property2\": 10   
"
}

完成后,你现有的代码

 class Program
{
    static void Main(string[] args)
    {
        string testJson = File.ReadAllText(@"D:\test.json");

        CType cType = JsonConvert.DeserializeObject<CType>(testJson);

    }
}
public class CType
{
    public string AssemblyName { get; set; }
    public string ClassName { get; set; }
    public string Options { get; set; }
}

然而,如果你想把它变成另一个对象,就像一个字典一样--json需要稍加修改,如下所示。

{
"AssemblyName": "AssemplyName",
"ClassName": "AssemplyName.ClassName",
"Options": {
"property1":"value1",
"property2": 10
}
}

这段代码需要将属性改为Dictionary。

 class Program
{
    static void Main(string[] args)
    {
        string testJson = File.ReadAllText(@"D:\test.json");

        CType cType = JsonConvert.DeserializeObject<CType>(testJson);

    }
}
public class CType
{
    public string AssemblyName { get; set; }
    public string ClassName { get; set; }
    public Dictionary<string,string> Options { get; set; }
}
© www.soinside.com 2019 - 2024. All rights reserved.