如何将JSON值保持为String?

Chr*_*sts 6 c# serialization json

这是JSON字符串:

{"name":"Chris","home":[],"children":[{"name":"Belle"},{"name":"O"}]}
Run Code Online (Sandbox Code Playgroud)

我通常像这样创建自定义对象:

public class Child
{
    public string name { get; set; }
}

public class RootObject
{
    [DataMember]
    public string name { get; set; }
    [DataMember]
    public List<object> home { get; set; }
    [DataMember]
    public List<Child> children { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但是现在我不想把孩子当作List,

我只想将子项记录/序列化为String,而不是Child.这意味着我只是不介意保留这部分:[{"name":"Belle"},{"name":"O"}]为STRING,NOT Array/List.

我怎样才能做到这一点?我正在使用DataContractJSONSeriliazer.ReadObject方法.

Kub*_*tek 6

由于您不介意使用其他库,因此我建议使用 NewtonSoft JSON.NET。有一些类(JObjectJArray等)可以将任意 JSON 数据表示为某个强类型对象的一部分。我使用它是为了反序列化一些大型 JSON,我只对其中的一小部分感兴趣。我可以反序列化整个 JSON,修改重要的部分并重新序列化,保持不相关的部分不变。

这是获取childrenas 字符串的代码示例,即使它是 JSON 中的数组。重要的是您可以修改其他字段(namehome)的内容并将整个内容序列化回来,并且children在 JSON 输出中将保留一个包含原始内容的数组。

假设

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
Run Code Online (Sandbox Code Playgroud)

这是代码示例:

public class RootObject
{
    public string name;
    public List<object> home;
    public JArray children; // I don't care what children may contain
}

class Program
{
    static void Main(string[] args)
    {
        string sourceJSON =
          @"{""name"":""Chris"",""home"":[],""children"":[{""name"":""Belle""},{""name"":""O""}]}";
        RootObject rootObject = JsonConvert.DeserializeObject<RootObject>(sourceJSON);
        string partAsString = rootObject.children.ToString(Formatting.None);
        // partAsString is now: [{"name":"Belle"},{"name":"O"}]
    }
}
Run Code Online (Sandbox Code Playgroud)