c# - 如何将 JSON 值保留为字符串?

标签 c# json serialization

这是 JSON 字符串:

{"name":"Chris","home":[],"children":[{"name":"Belle"},{"name":"O"}]}

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

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; }
}

但现在我不希望 child 像 List,

我只想将 child 记录/序列化为字符串,而不是 child 。这意味着我不介意保留这部分:[{"name":"Belle"},{"name":"O"}] 作为字符串,而不是数组/列表。

我该怎么做?我正在使用 DataContractJSONSeriliazer.ReadObject 方法。

最佳答案

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

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

假设

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

这是代码示例:

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"}]
    }
}

关于c# - 如何将 JSON 值保留为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31391674/

相关文章:

c# - 是否有管理 IIS 8 的托管 API?

c# - 单元测试 dotnetopenauth ctp

C# 套接字.BeginReceive/EndReceive

json - 使用 jq 将键值行转换为 json

python - 类型对象 'Users' 没有属性 '_meta'

C# xml序列化去除锯齿状数组元素名称

java - 以编程方式添加 Java 文件的 SerialVersion Id

c# - 引用字符串 [] 内存泄漏与 NET/COM 互操作

json - Go Lang 帮助 - 访问数组/接口(interface) slice

serialization - 你能给我一个不可序列化数据的例子吗?