在没有对象的c#中操作JSON字符串
本文关键字:操作 JSON 字符串 对象 | 更新日期: 2023-09-27 18:18:12
我有JSON字符串,我从文件中读取。我没有JSON对象的源代码。所以不能叫JsonConvert.DeserializeObject
。
然而,我想检查JSON字符串是否有特定的结构,如果是,附加一些字符串或如果没有附加结构。
allmodules {
feature: 'test-a'
}
submodules {
//some data
}
假设没有allmodules
,我想附加结构
allmodules {
feature: 'debug-a'
}
如果已经可用,只需附加feature: 'debug-a'
等等,我有一些定制的工作要做。有没有有效的方法来做到这一点,而不破坏JSON格式。大多数关于字符串到对象反序列化的问题,然而,正如我提到的,我没有原始对象,不能这样做。
您可以使用JObject
并进行一些手动解析。它可以看起来像这样:
public string AppendAllModules(string json)
{
var obj = JObject.Parse(json);
JToken token;
if (obj.TryGetValue("allmodules", out token))
return json;
obj.Add(new JProperty("allmodules", new JObject(new JProperty("feature", "test-a"))));
return obj.ToString();
}
给定:
{
"submodules": {
"name": "yuval"
}
}
将收益率:
{
"submodules": {
"name": "yuval"
},
"allmodules": {
"feature": "test-a"
}
}
我没有JSON对象的源代码。
不用担心,您可以简单地构造一个新的c#对象,它与JSON定义兼容。
中列出了许多选项如何从JSON对象字符串自动生成c#类文件
一旦你的项目中有了一个兼容的c#类,你就可以反序列化JSON并将其作为一个对象来操作,就像你拥有原始对象一样。
使用JObject.FromObject
或JObject.Parse
将您的文件json字符串转换为JObject
。那么下面的示例代码可能会有所帮助。我要通过If/else
的方式,因为你提到你不能得到确切的结构。
JObject obj = JObject.FromObject(
new {Id = 5, Name = "Foo"}
);
JToken jtok = null;
bool found = obj.TryGetValue("Bar",StringComparison.CurrentCultureIgnoreCase, out jtok);
if (!found)
{
obj.Add("Bar","this is added");
}
else
{
Console.WriteLine(jtok);
}
Console.WriteLine(obj["Bar"]);
当然,在你编辑完JObject
之后,你可以使用JObject.ToString()
方法来获得字符串表示并将其发送到文件