Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Newtonsoft自定义Json转换字符串数组到逗号分隔字符串WebApi 2_C#_Json.net_Asp.net Web Api2 - Fatal编程技术网

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

C# Newtonsoft自定义Json转换字符串数组到逗号分隔字符串WebApi 2,c#,json.net,asp.net-web-api2,C#,Json.net,Asp.net Web Api2,我原以为使用Newtonsoft将JSON数组转换为逗号分隔的字符串并返回会非常容易,但我在使ReadJson正常工作时遇到了问题。我原以为我会将读取器反序列化为字符串数组,然后调用Join,但在反序列化object:PropertyName时,我不断收到错误:意外标记。路径“[0]”。 以下是我正在使用的代码: public class myModel { [JsonConverter(typeof(CommaSeperatedStringJsonConverter))] pu

我原以为使用Newtonsoft将JSON数组转换为逗号分隔的字符串并返回会非常容易,但我在使
ReadJson
正常工作时遇到了问题。我原以为我会将读取器反序列化为字符串数组,然后调用
Join
,但在反序列化object:PropertyName时,我不断收到错误:
意外标记。路径“[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[]));
        }
    }
}


尝试改用泛型版本的
反序列化
。换句话说,更改此行:

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

var stringArray = serializer.Deserialize<string[]>(reader);
var stringArray=serializer.Deserialize(读取器);
小提琴:


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

结果表明,我在同一个类上使用了一个不同的自定义Json转换器,这是在这个类之前执行的。我仍在使用.Net Framework和NetwonSoft 12.03,您的示例看起来使用的是.Net Core。我将FIDLE更新为使用.Net Framework 4.7.2,而不是.Net Core。解决方案似乎仍然有效。