Newtonsoft Custom Json 将字符串数组转换为逗号分隔的字符串 WebApi 2
Newtonsoft Custom Json Converter String Array to Comma Separated string WebApi 2
我认为这很容易从 JSON 数组转换为逗号分隔的字符串,然后使用 Newtonsoft 返回,但我在使 ReadJson
工作时遇到了问题。我以为我会从 reader 反序列化为字符串数组,然后调用 Join
,但我不断收到错误:Unexpected token while deserializing object: PropertyName. Path '[0].
。
这是我使用的代码:
public class myModel
{
[JsonConverter(typeof(CommaSeperatedStringJsonConverter))]
public string myString { get; set; }
public int myNumber { get; set; }
}
public class CommaSeperatedStringJsonConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(string);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var stringArray = serializer.Deserialize(reader, typeof(string[]));
return string.Join(",", stringArray);
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
if (value is null)
{
writer.WriteNull();
}
else
{
serializer.Serialize(writer, value.ToString().Split(','), typeof(string[]));
}
}
}
请尝试使用 Deserialize
的通用版本。换句话说,更改此行:
var stringArray = serializer.Deserialize(reader, typeof(string[]));
为此:
var stringArray = serializer.Deserialize<string[]>(reader);
Fiddle: https://dotnetfiddle.net/KpQSiG
这应该无关紧要,但出于某种原因,它在这种情况下确实如此。如果我有更多时间,我将尝试深入研究源代码以查看发生了什么。
我认为这很容易从 JSON 数组转换为逗号分隔的字符串,然后使用 Newtonsoft 返回,但我在使 ReadJson
工作时遇到了问题。我以为我会从 reader 反序列化为字符串数组,然后调用 Join
,但我不断收到错误:Unexpected token while deserializing object: PropertyName. Path '[0].
。
这是我使用的代码:
public class myModel
{
[JsonConverter(typeof(CommaSeperatedStringJsonConverter))]
public string myString { get; set; }
public int myNumber { get; set; }
}
public class CommaSeperatedStringJsonConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(string);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var stringArray = serializer.Deserialize(reader, typeof(string[]));
return string.Join(",", stringArray);
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
if (value is null)
{
writer.WriteNull();
}
else
{
serializer.Serialize(writer, value.ToString().Split(','), typeof(string[]));
}
}
}
请尝试使用 Deserialize
的通用版本。换句话说,更改此行:
var stringArray = serializer.Deserialize(reader, typeof(string[]));
为此:
var stringArray = serializer.Deserialize<string[]>(reader);
Fiddle: https://dotnetfiddle.net/KpQSiG
这应该无关紧要,但出于某种原因,它在这种情况下确实如此。如果我有更多时间,我将尝试深入研究源代码以查看发生了什么。