Newtonsoft Custom Json Конвертер массива строк в запятую Разделенная строка WebApi 2 - PullRequest
1 голос
/ 19 марта 2020

Я думал, что это довольно легко преобразовать из массива 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[]));
        }
    }
}

1 Ответ

1 голос
/ 19 марта 2020

Попробуйте вместо этого использовать c версию Deserialize. Другими словами, измените эту строку:

var stringArray = serializer.Deserialize(reader, typeof(string[]));

На это:

var stringArray = serializer.Deserialize<string[]>(reader);

Fiddle: https://dotnetfiddle.net/KpQSiG

Не должно имеет значение, но по какой-то причине это делает в этой ситуации. Если у меня будет больше времени, я попытаюсь покопаться в исходном коде, чтобы увидеть, что происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...