gpt4 book ai didi

c# - 解析 Json 返回字符串还是字符串数组?

转载 作者:行者123 更新时间:2023-11-30 16:39:10 37 4
gpt4 key购买 nike

我可以使用泛型将这些代码变成一个方法吗?

我想要返回字符串或字符串数​​组,因为我的 Json 文件如下所示。

Json sample

所以我想这样做。

public static string langFilePath = @"..\..\..\Core\Data\Lang.json";
public static JObject lang = JObject.Parse(File.ReadAllText(langFilePath));

public static string[] GetJsonValue(string key)
{
string[] values = lang[key].ToObject<string[]>();

return values;
}

但是key的值不能是字符串数组。

也可以是字符串

最佳答案

与其返回两种可能的返回类型之一,可能更简单的方法是将单个字符串强制转换为包含该字符串的数组。假设你不控制 Json,你可能想写一个自定义 JsonConverter .这是我对这个问题的快速而肮脏的尝试:

public class LangEntryConverter: JsonConverter<string[]>
{
// WriteJson implementation only needed if you need to serialize a value back to Json
public override void WriteJson(JsonWriter writer, string[] value, JsonSerializer serializer)
{
if (value.Length == 1)
{
writer.WriteValue(value[0]);
}
else
{
writer.WriteStartArray();
for (var i = 0; i < value.Length; i++)
{
writer.WriteValue(value[i]);
}
writer.WriteEndArray();
}
}

public override string[] ReadJson(JsonReader reader, Type objectType, string[] existingValue, bool hasExistingValue, JsonSerializer serializer)
{
var values = new List<string>();
if (reader.TokenType == JsonToken.StartArray)
{
while (reader.Read() && reader.TokenType != JsonToken.EndArray)
{
if (reader.TokenType == JsonToken.String)
{
values.Add((string)reader.Value);
}
else
{
throw new Exception($"Unexpected token type: {reader.TokenType}");
}
}
}
else if (reader.TokenType == JsonToken.String)
{
values.Add((string)reader.Value);
}

return values.ToArray();
}
}

然后像这样调用它:

// Note: double-quotations are required for C#'s verbatim string syntax; they are not part of the Json
var json = @"{
""foo"": ""one"",
""bar"": [""one"", ""two"", ""three""]
}";

var lang = JsonConvert.DeserializeObject<Dictionary<string, string[]>>(json, new LangEntryConverter());
Console.WriteLine(String.Join(", ", lang["foo"])); // one
Console.WriteLine(String.Join(", ", lang["bar"])); // one, two, three

当然,在您的特定情况下,这可能需要一些调整。

关于c# - 解析 Json 返回字符串还是字符串数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53507172/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com