我们说我有一个从类中反序列化的值。
public class MyValue
{
public string MyPropertyA { get; set; }
public string MyPropertyB { get; set; }
public string DeserializationClass { get; } = typeof(MyValue).Name;
}
我使用JsonConvert
类对其进行序列化。 MyValue
类有一个属性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);
}
}
编辑:修改了一些示例,以便更清楚我需要什么,因为当我需要反序列化字符串时,我无法访问objValue。
答案 0 :(得分:1)
可能您可能需要使用JsonSerializerSettings。 您可能需要做的是
JsonSerializerSettings setting = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.All,
};
然后在序列化时使用此设置。
var serialized = JsonConvert.SerializeObject(objValue,setting);
这会给你这样的Json
{"$type":"WPFDatagrid.MyValue, WPFDatagrid","MyPropertyA":"Something","MyPropertyB":"SomethingElse","DeserializationClass":"MyValue"}
从中您可以找到用于实际获取类型的类的名称。
希望这会有所帮助!!
答案 1 :(得分:0)
有一个重载
如果您的Type
采用命名空间的形式,则可以从字符串表示中获取类型:
Type objValueType = Type.GetType("Namespace.MyValue, MyAssembly");
object deserialized = JsonConvert.Deserialize(objValueType, serialized);