因此,我制作了一个自定义的JsonConverter,它似乎可以完美地序列化对象并将其反序列化。
具体来说,我正在通过NReco.VideoInfo序列化FFProbe输出:
public class NMediaInfoConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var n = ((MediaInfo) value).Result.CreateNavigator();
n.MoveToRoot();
var xDoc = new XmlDocument();
xDoc.Load(n.ReadSubtree());
writer.WriteRaw(JsonConvert.SerializeXmlNode(xDoc, serializer.Formatting));
}
如果我这样序列化它:
File.WriteAllText("myfile.json"), JsonConvert.SerializeObject(videoInfo, Formatting.Indented, new NMediaInfoConverter()));
生活是美好的。这些文件是完美的,并且反序列化没有问题。
现在,如果我创建一个封装类,并使用NMediaInfoConverter装饰属性:
class MyMediaInfo
{
[JsonConverter(typeof(NMediaInfoConverter))]
public NReco.VideoInfo.MediaInfo NMediaInfo { get; set; }
}
在JSON的最后,我得到一个额外的空格,“空”,一个换行符和一个额外的结束括号:
null
}
我在某处错过了重点吗?