c# - 为 DataContractJsonSerializer 设置额外的调用者定义的上下文
问题描述
因为BinaryFormatter
我可以设置一个额外的调用者定义的上下文,它将作为参数传递给反序列化后调用的方法,例如用[OnDeserialized]
属性装饰。
调用用[OnDeserialized]
for装饰的方法可以DataContractJsonSerializer
工作,但是如何为其设置额外的调用者定义的上下文?可能吗?
我想避免SetBusinessObj(..)
在反序列化后手动调用一些专用方法。
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;
}
}
}
解决方案
推荐阅读
- react-admin - 根据需要调用 LoadingIndicator
- c - C程序中的类型转换失败
- java - 将 JSON 格式的 API 响应与 CSV 进行比较,两者都有数百万条记录,并且 csv 列名称与 JSON 字段不同
- android - android benchmark没有显示在日志文件中运行
- php - 在 Windows 服务器上安装 PHP v 8
- python - tkinter 单选按钮未在类中显示值
- xml - IBM Watson Assistant:如何以 XML 语法显示/打印字典(python3)?
- database - 当我在 Windows 中运行批处理文件以自动备份我的 postgresql 数据库时,如何自动设置 PGPASSWORD
- nativescript - NativeScript-Vue:如何安装 BottomNavigation 组件
- c# - 在 C# 中将浮点/双精度/十进制转换为 (u)int、(u)long 而不分配内存