So I've made a custom JsonConverter that seems to do just perfectly serializing an object and deserializing it.
Specifically, I'm serializing an FFProbe output via NReco.VideoInfo:
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));
}
And if I serialize it thusly:
File.WriteAllText("myfile.json"), JsonConvert.SerializeObject(videoInfo, Formatting.Indented, new NMediaInfoConverter()));
Life is good. The files are perfect, and they deserialize without a problem.
Now if I make an encapsulating class, and decorate the property with the NMediaInfoConverter:
class MyMediaInfo
{
[JsonConverter(typeof(NMediaInfoConverter))]
public NReco.VideoInfo.MediaInfo NMediaInfo { get; set; }
}
At the very end of my JSON, I get an extra space, "null", a linefeed, and an extra closing bracket:
null
}
Am I missing the point, somewhere?