如何解析包含波斯语键的JSON字符串?
解析含波斯语键的JSON字符串的解决方案
问题根源
你使用的[JsonProperty]是Newtonsoft.Json(Json.NET)的特性,但解析代码调用的是.NET原生的System.Text.Json.JsonSerializer,两者特性不兼容,导致解析失败。另外注意JSON里"شماره قرائت قبلی"的值是数字类型4123,但你模型里定义的是string类型,类型不匹配也会引发解析异常或值为null。
解决步骤
- 替换特性:将模型中的
[JsonProperty]替换为System.Text.Json对应的[JsonPropertyName]特性,确保引用正确的命名空间。 - 修正类型匹配:根据JSON值的实际类型调整模型属性类型,或者配置解析器允许类型转换。
修改后的代码示例
修正后的模型类(匹配JSON数字类型)
using System.Text.Json.Serialization; public class AdditionalModel { [JsonPropertyName("شماره قرائت قبلی")] public int NoRead { get; set; } [JsonPropertyName("قطر انشعاب آب")] public string Diameter { get; set; } }
若需保留string类型(允许数字转字符串)
using System.Text.Json; using System.Text.Json.Serialization; // 配置解析选项 var options = new JsonSerializerOptions { NumberHandling = JsonNumberHandling.AllowReadingFromString | JsonNumberHandling.WriteAsString }; // 解析JSON string extraInfo = @"{""قطر انشعاب آب"":""1/2اینچ"",""شماره قرائت قبلی"":4123}"; var additional = JsonSerializer.Deserialize<AdditionalModel>(extraInfo, options);
验证解析结果
Console.WriteLine($"شماره قرائت قبلی: {additional.NoRead}"); // 输出 4123 Console.WriteLine($"قطر انشعاب آب: {additional.Diameter}"); // 输出 1/2اینچ
内容的提问来源于stack exchange,提问作者M Javad Salehi
相关产品推荐
相关产品推荐

