将一个对象反序列化为另一种类型的类似对象json.net

将一个对象反序列化为另一种类型的类似对象json.net,json,types,deserialization,Json,Types,Deserialization,我有一个与类似的问题,但仍然会出错 所以,我有三个班: public class Class1 { public string[] P2 { get; set; } } public class Class2 { public Wrapper<string>[] P2 { get; set; } } public class Wrapper<T> { public T Value { get; set; } } 谢谢, 亚历克斯我自己设法找到

我有一个与类似的问题,但仍然会出错

所以,我有三个班:

public class Class1
{
    public string[] P2 { get; set; }
}

public class Class2
{
    public Wrapper<string>[] P2 { get; set; }
}

public class Wrapper<T>
{
    public T Value { get; set; }
}
谢谢,
亚历克斯我自己设法找到了答案。以下是方法:

Class2 c2 = new Class2 
{ 
     P2 = new Wrapper<string>[] 
        {
            new Wrapper<string> { Value = "a" },
            new Wrapper<string> { Value = "a" },
        },
};

string s = JsonConvert.SerializeObject(c2);
Class1 c1 = (Class1)JsonConvert.DeserializeObject(s, typeof(Class1), new FormatConverter());
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        if (type == typeof(string[]) && reader.TokenType == JsonToken.StartArray)
        {
            //remove converter not to trigger a recursive call
            var converter = serializer.Converters[0];
            serializer.Converters.RemoveAt(0);

            //deserialization into correct type
            Wrapper<string>[] obj = (Wrapper<string>[])serializer.Deserialize(reader, typeof(Wrapper<string>[]));

            //restore converter
            serializer.Converters.Add(converter);

            if (obj != null)
            {
                return obj.Select(w => w == null ? null : w.Value).ToArray();
            }
            return reader.Value;
        }
    }
public override object ReadJson(JsonReader reader,类型objectType,对象existingValue,JsonSerializer序列化程序)
{
if(type==typeof(string[])&&reader.TokenType==JsonToken.StartArray)
{
//移除转换器以不触发递归调用
var converter=序列化程序。转换器[0];
序列化程序.Converters.RemoveAt(0);
//反序列化为正确的类型
包装器[]对象=(包装器[])序列化程序。反序列化(读取器,类型化(包装器[]));
//还原转换器
serializer.Converters.Add(转换器);
如果(obj!=null)
{
返回obj.Select(w=>w==null?null:w.Value).ToArray();
}
返回reader.Value;
}
}

un我注意到的更多事情是,
反序列化对象
失败,即使在
ReadJson
中,我只返回一个数组,如下所示:
返回新字符串[1]{“a”}
An unhandled exception of type 'Newtonsoft.Json.JsonSerializationException' occurred in Newtonsoft.Json.dll

Additional information: Unexpected end when deserializing object. Path '', line 1, position 46.
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        if (type == typeof(string[]) && reader.TokenType == JsonToken.StartArray)
        {
            //remove converter not to trigger a recursive call
            var converter = serializer.Converters[0];
            serializer.Converters.RemoveAt(0);

            //deserialization into correct type
            Wrapper<string>[] obj = (Wrapper<string>[])serializer.Deserialize(reader, typeof(Wrapper<string>[]));

            //restore converter
            serializer.Converters.Add(converter);

            if (obj != null)
            {
                return obj.Select(w => w == null ? null : w.Value).ToArray();
            }
            return reader.Value;
        }
    }