我有一个字典序列化存储与DataContractJsonSerializer,我想用Newtonsoft.Json反序列化.
DataContractJsonSerializer已将Dictionary序列化为键/值对列表:
{"Dict":[{"Key":"Key1","Value":"Val1"},{"Key":"Key2","Value":"Val2"}]}
Run Code Online (Sandbox Code Playgroud)
有什么很酷的选择,我可以给它JsonConvert.DeserializeObject<>(),它将支持数据格式和Newtonsoft.Json的格式?
{"Dict":{"Key1":"Val1","Key2":"Val2"}}
Run Code Online (Sandbox Code Playgroud)
是Newtonsoft.Json创建的漂亮格式,我希望能够在过渡期内同时读取旧的DataContract格式和新的Newtonsoft格式.
简化示例:
//[JsonArray]
public sealed class Data
{
public IDictionary<string, string> Dict { get; set; }
}
[TestMethod]
public void TestSerializeDataContractDeserializeNewtonsoftDictionary()
{
var d = new Data
{
Dict = new Dictionary<string, string>
{
{"Key1", "Val1"},
{"Key2", "Val2"},
}
};
var oldJson = String.Empty;
var formatter = new DataContractJsonSerializer(typeof (Data));
using (var stream = new MemoryStream())
{
formatter.WriteObject(stream, d);
oldJson = Encoding.UTF8.GetString(stream.ToArray());
}
var newJson = JsonConvert.SerializeObject(d);
// [JsonArray] on Data class gives: …Run Code Online (Sandbox Code Playgroud)