C#中如何将字符串转换为JsonObject?(Product类单元测试场景)
问题:如何将JSON字符串转换为JsonObject类型?
定义的Product类
public class Product { public string id { get; set; } public JsonObject details { get; set; } }
POST请求中details的示例数据
{ "id": "1", "type": "icecream", "name": "Vanilla Cone", "image": { "url": "img/01.png", "width": 200, "height": 200 } }
测试遇到的问题
编写单元测试时,尝试直接给details赋值JSON字符串:
details = "\{ \"id\":\"1\", \"type\": \"icecream\"}, "
触发了无法将string类型转换为JsonObject的错误,需要解决字符串转JsonObject的问题。
解决方法
根据你使用的JSON处理库,有两种常见的转换方式:
1. 使用.NET内置的System.Text.Json(默认推荐)
如果项目基于.NET Core/.NET 5及以上版本,直接用JsonObject.Parse()方法即可完成转换,同时注意修正原JSON字符串的语法错误(去掉多余逗号、修正转义):
// 正确的JSON字符串,也可以用逐字字符串@""简化转义 string jsonDetails = "{ \"id\":\"1\", \"type\": \"icecream\" }"; // 直接解析为JsonObject product.details = JsonObject.Parse(jsonDetails);
也可以用JsonSerializer.Deserialize方法实现同样效果:
product.details = JsonSerializer.Deserialize<JsonObject>(jsonDetails);
2. 使用Newtonsoft.Json(Json.NET)
如果项目依赖Newtonsoft.Json库,注意该库中对应的类型是JObject,需要先确保Product类的details字段类型为JObject,然后用JObject.Parse():
string jsonDetails = "{ \"id\":\"1\", \"type\": \"icecream\" }"; product.details = JObject.Parse(jsonDetails);
额外注意
你之前的赋值字符串存在语法问题:"\{ \"id\":\"1\", \"type\": \"icecream\"}, "多了结尾的逗号,且大括号前无需加反斜杠(除非在字符串插值表达式中),建议改为逐字字符串格式避免转义错误:
string jsonDetails = @"{ ""id"":""1"", ""type"": ""icecream"" }";
内容的提问来源于stack exchange,提问作者Krypto456
相关产品推荐
相关产品推荐

