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

这应该无关紧要,但出于某种原因,它在这种情况下确实如此。如果我有更多时间,我将尝试深入研究源代码以查看发生了什么。