问题
Using Json.NET are Serialization Callbacks supported when the OnDeserializedAttribute is placed on a base class method? For example using this object graph:
[DataContract]
public class StubData:StubBase {}
[DataContract]
public class StubBase {
public string Id { get; set; }
[OnDeserialized]
public void OnDeserialized(StreamingContext context) {
Id = "1";
}
}
var stubData = JsonConvert.DeserializeObject<StubData>(@"{""anyData"":""Foo""}");
stubData.Id //returns 1
回答1:
Yes. OnDeserialized
is supported. See the documentation
Here's a working cs-script example. Needs Newtonsoft.Json.dll is the same directory
//css_ref Newtonsoft.Json.dll
using System;
using System.Windows.Forms;
using Newtonsoft.Json;
using System.Runtime.Serialization;
public class StubData:StubBase {}
public class StubBase {
public string Id { get; set; }
[OnDeserialized]
public void OnDeserialized(StreamingContext context) {
Id = "1";
}
}
class Script
{
[STAThread]
static public void Main(string[] args)
{
var stubData = JsonConvert.DeserializeObject<StubData>(@"{""anyData"":""Foo""}");
Console.WriteLine(stubData.Id); //returns 1
}
}
This prints
1
来源:https://stackoverflow.com/questions/6350749/json-net-serialization-callbacks-in-base-object