json - WCF 自定义序列化
问题描述
我正在使用 .Net Framework WCF。此应用程序接收 json 请求和响应 json 字符串。我想使用我自己的序列化库进行序列化和反序列化操作。
在 asp.net 中,我曾经在 Global.asax 文件中执行此操作:
IJsonSerializer serializer = new Serializer();
GlobalConfiguration.Configuration.Formatters.Add(new CustomFormatter(serializer));
这是我的客户格式化程序类:
using System.Text;
using System;
using System.IO;
using System.Net.Http;
using System.Net.Http.Formatting;
using System.Net;
using System.Threading.Tasks;
namespace Test.Formatters
{
public class CustomFormatter: MediaTypeFormatter
{
private readonly IJsonSerializer _serializer;
public CustomFormatter(IJsonSerializer serializer)
{
_serializer = serializer;
SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"));
SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("text/json"));
SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("application/xml"));
SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("text/xml"));
SupportedEncodings.Add(Encoding.UTF8);
SupportedEncodings.Add(Encoding.Unicode);
}
public override bool CanReadType(Type type)
{
return true;
}
public override bool CanWriteType(Type type)
{
return true;
}
public override async Task<object> ReadFromStreamAsync(Type type, Stream readStream, HttpContent content, IFormatterLogger formatterLogger)
{
StreamReader reader = new StreamReader(readStream);
string text = await reader.ReadToEndAsync();
var serializedObj = _serializer.Deserialize(type, text);
return serializedObj;
}
public override async Task WriteToStreamAsync(Type type, object value, Stream writeStream, HttpContent content, TransportContext transportContext)
{
var serializedObj = _serializer.Serialize(value);
var encoding = Encoding.GetEncoding(content.Headers.ContentType.CharSet);
await writeStream.WriteAsync(encoding.GetBytes(serializedObj), 0, encoding.GetBytes(serializedObj).Length);
}
}
}
在 .NetFramework WebAPI 中, ReadFromStreamAsync和WriteToStreamAsync被完美触发。但是,在 WCF 中,即使内容类型为“application/json”,它们也不会被触发。
如何自己处理 WCF 序列化?
解决方案
推荐阅读
- flutter - Flutter:提供者:ListView 在 notifyListener() 之后没有重新绘制
- amazon-web-services - 使用 hive Metastore 为自定义 s3 设置 presto
- java - 将 libgdx 项目从 java 转换为 kotlin 后无法找到或加载主类
- python - 有没有办法在特定位置“叠加”两个(熊猫)数据帧?
- android - Android Studio 混合了两个不同应用程序的代码
- python - "int 'object is not subscriptable"
- docker - 为什么我不能从 GAE 中的内部或外部 IP 访问我的容器?
- python - 这个修改后的清理功能是否正确?
- reactjs - AppSync 列表查询从 JS 客户端应用程序返回空数组,但从 AppSync 控制台返回填充数组
- python - 使用 pyinstaller --onefile --add-data 捆绑 Python 不起作用