Setting an additional caller-defined context for DataContractJsonSerializer

52 Views Asked by At

For BinaryFormatter I can set an additional caller-defined context, which will be passed as parameter to the method called after deserialization, e.g. decorated with [OnDeserialized] attribute.
Calling the method decorated with [OnDeserialized] for DataContractJsonSerializer works, but how can I set an additional caller-defined context for it? Is it possible?
I would like to avoid to call some dedicated method like SetBusinessObj(..) manually after deserialization.

var businessObject = "some business object";
var serObj = new SerialClass(businessObject) { Data1 = "some data1" };
using(var ms = new MemoryStream())
{
    var bf = new BinaryFormatter(null, new StreamingContext(StreamingContextStates.Other, businessObject));
    bf.Serialize(ms, serObj);
    ms.Flush();
    ms.Position = 0;
    var deserObj = bf.Deserialize(ms);
}
using(var ms = new MemoryStream())
{
    //How to set an additional caller-defined context?
    var jsnSer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(typeof(SerialClass));
    jsnSer.WriteObject(ms, serObj);
    ms.Flush();
    ms.Position = 0;
    var deserObj = jsnSer.ReadObject(ms);
}

[Serializable]
class SerialClass
{
    public string Data1 { get; set; }
    private object _businessObj = null;
    public SerialClass(object bo)
    {
        _businessObj = bo;
    }
    [OnDeserialized]
    private void OnDeserialized(StreamingContext sctx)
    {
        if(sctx.Context is string dataIsHere)
        {
            _businessObj = dataIsHere;
        }
    }
}
0

There are 0 best solutions below