首页 > 解决方案 > 如何部分提取 JSON 字符串以按名称获取特定对象

问题描述

我有以下 json 字符串:

 "{"\"itemList\":[{\"id\":1,\"name\":\"Item 1 Name\"},{\"id\":2,\"name\":\"Item 2 Name\"}],"listInfo":{"info1":1,"info2":"bla"}}"

如何将特定对象提取到字符串中?例如,我想从中获取一个新字符串,如下所示:

[{\"id\":1,\"name\":\"Item 1 Name\"},{\"id\":2,\"name\":\"Item 2 Name\"}]

和另一个看起来像这样的字符串:

{"info1":1,"info2":"bla"}.

第一个字符串表示itemList对象(包含一个数组),第二个字符串表示listInfo对象。

我的目标是将这些字符串与我计划序列化以进行单元测试的其他对象进行比较。

标签: c#jsonunit-testingdeserializationmstest

解决方案


First, create a DTO for your JSON string:

class BaseClass
{
    public List<ItemList> itemList = new List<ItemList>();
    public ListInfo listInfo = new ListInfo();
}

class ItemList
{
    public string id { get; set; }
    public string name { get; set; }
}

class ListInfo
{
    public string info1 { get; set; }
    public string info2 { get; set; }
}

Then: (after I fixed the JSON string format)

using Newtonsoft.Json;
using System;
using System.Collections.Generic;

string jsonString = "{\"itemList\":[{\"id\":1,\"name\":\"Item 1 Name\"},{\"id\":2,\"name\":\"Item 2 Name\"}],\"listInfo\":{\"info1\":1,\"info2\":\"bla\"}}";

BaseClass toCompare = JsonConvert.DeserializeObject<BaseClass>(jsonString);
string itemList = JsonConvert.SerializeObject(toCompare.itemList);
string listInfo = JsonConvert.SerializeObject(toCompare.listInfo);

推荐阅读