反序列化继承 类
Deserializing inherited classes
我想将参数设置从后端应用程序发送到前端。我还需要能够拥有不同类型的参数(端口号、文件夹、静态字符串等)。
所以我设计了一个基类,参数如下:
public abstract class Parameter
{
public abstract bool isValid();
}
假设我们有两种类型的文件夹参数:
public abstract class Folder : Parameter
{
public string folderName { get; set; }
protected Folder(string folderName)
{
this.folderName = folderName;
}
}
public class ReadWriteFolder : Folder
{
public ReadWriteFolder(string folderName) : base(folderName)
{
}
public override bool isValid()
{
return isReadable() && isWritable();
}
}
public class ReadFolder : Folder
{
public ReadFolder(string folderName) : base(folderName)
{
}
public override bool isValid()
{
return isReadable();
}
}
这是从 WebAPI 使用的,所以这是我的控制器:
public Dictionary<String, Parameter> Get()
{
Dictionary<String, Parameter> dictionary = new Dictionary<String, Parameter>();
dictionary.Add("TemporaryFiles", new ReadWriteFolder("C:\temp\"));
dictionary.Add("AnotherTemporaryFiles", new ReadWriteFolder("D:\temp\"));
return dictionary;
}
这会产生以下 JSON-序列化:
{"TemporaryFiles":{"folderName":"C:\temp\"},"AnotherTemporaryFiles":{"folderName":"D:\temp\"}}
这似乎是合理的。
我的问题是:如何将其反序列化回原始类型?或者把序列化改成更容易反序列化的东西?
你用什么连载的?如果它是 JSON.Net(这里很多人会建议!),则有许多相关问题:
how to deserialize JSON into IEnumerable with Newtonsoft JSON.NET
但关键是类型名称处理,它将使用类型信息装饰元素以便能够反序列化它们:
JsonSerializerSettings settings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.All
};
string strJson = JsonConvert.SerializeObject(dictionary, settings);
然后就可以直接反序列化了
var returnDictionary = JsonConvert.DeserializeObject<Dictionary<String, Parameter>>(strJson, settings)
我想将参数设置从后端应用程序发送到前端。我还需要能够拥有不同类型的参数(端口号、文件夹、静态字符串等)。
所以我设计了一个基类,参数如下:
public abstract class Parameter
{
public abstract bool isValid();
}
假设我们有两种类型的文件夹参数:
public abstract class Folder : Parameter
{
public string folderName { get; set; }
protected Folder(string folderName)
{
this.folderName = folderName;
}
}
public class ReadWriteFolder : Folder
{
public ReadWriteFolder(string folderName) : base(folderName)
{
}
public override bool isValid()
{
return isReadable() && isWritable();
}
}
public class ReadFolder : Folder
{
public ReadFolder(string folderName) : base(folderName)
{
}
public override bool isValid()
{
return isReadable();
}
}
这是从 WebAPI 使用的,所以这是我的控制器:
public Dictionary<String, Parameter> Get()
{
Dictionary<String, Parameter> dictionary = new Dictionary<String, Parameter>();
dictionary.Add("TemporaryFiles", new ReadWriteFolder("C:\temp\"));
dictionary.Add("AnotherTemporaryFiles", new ReadWriteFolder("D:\temp\"));
return dictionary;
}
这会产生以下 JSON-序列化:
{"TemporaryFiles":{"folderName":"C:\temp\"},"AnotherTemporaryFiles":{"folderName":"D:\temp\"}}
这似乎是合理的。
我的问题是:如何将其反序列化回原始类型?或者把序列化改成更容易反序列化的东西?
你用什么连载的?如果它是 JSON.Net(这里很多人会建议!),则有许多相关问题:
how to deserialize JSON into IEnumerable with Newtonsoft JSON.NET
但关键是类型名称处理,它将使用类型信息装饰元素以便能够反序列化它们:
JsonSerializerSettings settings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.All
};
string strJson = JsonConvert.SerializeObject(dictionary, settings);
然后就可以直接反序列化了
var returnDictionary = JsonConvert.DeserializeObject<Dictionary<String, Parameter>>(strJson, settings)