Newtonsoft自定义Json转换器字符串数组到逗号分隔字符串WebApi 2



我认为从JSON数组转换为逗号分隔的字符串并使用Newtonsoft返回会很容易,但我在使ReadJson工作时遇到了问题。我原以为我只需要从读取器反序列化为一个字符串数组,然后调用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

这本不重要,但出于某种原因,在这种情况下确实如此。如果我有更多的时间,我会尝试深入研究源代码,看看发生了什么。

最新更新