C# 按类名反序列化字符串

C# 按类名反序列化字符串,c#,reflection,deserialization,C#,Reflection,Deserialization,假设我有一个从类反序列化的值 public class MyValue { public string MyPropertyA { get; set; } public string MyPropertyB { get; set; } public string DeserializationClass { get; } = typeof(MyValue).Name; } 我使用JsonConvert类序列化了它MyValueclass有一个属性Deserializat

假设我有一个从类反序列化的值

public class MyValue
{
    public string MyPropertyA { get; set; }
    public string MyPropertyB { get; set; }
    public string DeserializationClass { get; } = typeof(MyValue).Name;
}
我使用
JsonConvert
类序列化了它
MyValue
class有一个属性
DeserializationClass
,该属性应该用作字符串从哪个类序列化的信息。换句话说,当我将字符串反序列化为对象时,这个属性充当应该使用哪个类来反序列化字符串的信息。然而,我有点被困在这里,因为我不知道如何从字符串中恢复类。有人能帮我吗

public class Program
{
    void Main()
    {
        var serialized = Serialize();
        var obj = Deserialize(serialized);
    }

    string Serialize()
    {
        var objValue = new MyValue { MyPropertyA="Something", MyPropertyB="SomethingElse" };
        return JsonConvert.SerializeObject<MyClass>(value);
    }

    object Deserialize(string serialized)
    {            
        //How to deserialize based on 'DeserializationClass' property in serialized string?
        return = JsonConvert.Deserialize<???>(serialized);
    }
}
公共类程序
{
void Main()
{
var serialized=Serialize();
var obj=反序列化(序列化);
}
字符串序列化()
{
var objValue=newmyvalue{MyPropertyA=“Something”,MyPropertyB=“SomethingElse”};
返回JsonConvert.SerializeObject(值);
}
对象反序列化(字符串序列化)
{            
//如何基于序列化字符串中的“DeserializationClass”属性进行反序列化?
return=JsonConvert.Deserialize(序列化);
}
}
编辑:修改示例,使其更清楚我需要什么,因为当我需要反序列化字符串时,我无法访问objValue。

有一个重载

如果
类型
采用名称空间的形式,则可以从字符串表示形式中获取类型:

Type objValueType = Type.GetType("Namespace.MyValue, MyAssembly");
object deserialized = JsonConvert.Deserialize(objValueType, serialized);
超载

如果
类型
采用名称空间的形式,则可以从字符串表示形式中获取类型:

Type objValueType = Type.GetType("Namespace.MyValue, MyAssembly");
object deserialized = JsonConvert.Deserialize(objValueType, serialized);

您可能需要使用JsonSerializerSettings。 你可能需要做的是

 JsonSerializerSettings setting = new JsonSerializerSettings
            {
                TypeNameHandling = TypeNameHandling.All,
            };
然后在序列化时使用此设置

 var serialized = JsonConvert.SerializeObject(objValue,setting);
这将为您提供这样的Json

从中可以找到用于实际获取类型的类的名称


希望这有帮助

您可能需要使用JsonSerializerSettings。 你可能需要做的是

 JsonSerializerSettings setting = new JsonSerializerSettings
            {
                TypeNameHandling = TypeNameHandling.All,
            };
然后在序列化时使用此设置

 var serialized = JsonConvert.SerializeObject(objValue,setting);
这将为您提供这样的Json

从中可以找到用于实际获取类型的类的名称


希望这有帮助

您可能想使用
typenameholling.All
而不是所有这些:您可能想使用
typenameholling.All
而不是所有这些:也许我应该提到在反序列化字符串时我没有访问objValue的权限。所以我不知道序列化字符串使用的是什么类型。也许我应该提到,当我反序列化字符串时,我没有访问objValue的权限。所以我不知道是什么类型被用来序列化到字符串。