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的权限。所以我不知道是什么类型被用来序列化到字符串。