Json.NET:序列化回调的基础对象回调、对象、基础、序列化

2023-09-06 21:48:55 作者:最好的遇见

使用Json.NET被序列化回调支持当OnDeserializedAttribute被放置在基类方法?例如使用该对象图:

  [DataContract]
公共类StubData:StubBase {}

[DataContract]
公共类StubBase {
    公共字符串ID {获得;组; }

    [OnDeserialized]
    公共无效OnDeserialized(的StreamingContext上下文){
        的id =1;
    }
}

VAR stubData = JsonConvert.DeserializeObject< StubData>(@{AnyDATA公司:富});

stubData.Id //返回1
 

解决方案

是的。 OnDeserialized 支持。请参阅

下面是一个工作 CS-脚本的例子。需要Newtonsoft.Json.dll是相同的目录

  // css_ref Newtonsoft.Json.dll

使用系统;
使用System.Windows.Forms的;
使用Newtonsoft.Json;
使用System.Runtime.Serialization;

公共类StubData:StubBase {}

公共类StubBase {
    公共字符串ID {获得;组; }

    [OnDeserialized]
    公共无效OnDeserialized(的StreamingContext上下文){
        的id =1;
    }
}

类脚本
{
    [STAThread]
    静态公共无效的主要(字串[] args)
    {
      VAR stubData = JsonConvert.DeserializeObject< StubData>(@{AnyDATA公司:富});
      Console.WriteLine(stubData.Id); //返回1
    }
}
 
如何在FastReport.Net中使用JSON格式的数据

这版画

  1
 

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

解决方案

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

 
精彩推荐
图片推荐