c# - 如何使用 /Date() 序列化包含 DateTime 的复杂对象
问题描述
我想将这样的对象序列化为 JSON:
ConcreteClassA classA = GetContreteClassA();
var request = Helper.GetRestRequest("Insert", Method.POST);
request.JsonSerializer = new ConcreteClasseAJsonSerializer();
request.AddJsonBody(new { abClass = classA, useBasicProcess = true });
IRestResponse<AbstractClass> response = _restClient.Execute<AbstractClass>(request);
if (response.StatusCode != System.Net.HttpStatusCode.OK)
Helper.ThrowExeption(response);
使用此代码,我得到错误:
反序列化参数 abClass 时出错。DateTime 的内容不以 '/Date(' 开头,也不以 ')/' 结尾,正如 json 所期望的那样。
这是此代码生成的 JSON,没有"/Date("
forDateMod
属性。
{"abClass":{"__type":"ConcreteClassA:http://www.test.com/WBS","Type":1,"Number":"FA8E5E78E70F04EB","Rate":7.85,"Name":"Toto",
"Qualite":"Société","DateMod":"0001-01-01T00:00:00"},"useBasicProcess":true}
下面是 Serialize 方法的代码ConcreteClassAJsonSerializer
:
public string Serialize(object obj)
{
var binder = new ConcreteClassATypeNameSerializationBinder();
string jsonString = JsonConvert.SerializeObject(obj, Formatting.None, new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Objects,
SerializationBinder = binder,
DateFormatHandling = DateFormatHandling.IsoDateFormat,
});
jsonString = jsonString.Replace("\"$type\":\"\",", string.Empty);
jsonString = jsonString.Replace("$type", "__type");
return jsonString;
}
}
以及 binder 的 BindToName 方法的代码:
public void BindToName(Type serializedType, out string assemblyName, out string typeName)
{
if (serializedType == typeof(ConcreteClassA) || serializedType == typeof(ConcreteClassB) || serializedType == typeof(ConcreteClassC))
{
assemblyName = null;
typeName = serializedType.Name + ":" + TypeFormat;
return;
}
assemblyName = null;
typeName = null;
}
我必须使用这个自定义序列化程序和绑定器来指定抽象类的具体类abClass
。但是如何\/Date(
在该序列化过程中添加缺失的内容?
解决方案
推荐阅读
- oauth-2.0 - Oauth2 和微服务
- google-app-engine - 反向代理背后的谷歌云 IAP
- ms-access - 从 MS Access 中的一组表中选择性地搜索
- javascript - 这个 raphael 图形演示不能在 jsfiddle 上运行
- angular - Angular6 + Loopback:“isAuth”在每个组件中不编写相同代码的最佳方法是什么?
- python - 使用浮点数作为键时,pandas merge_asof 错误
- android - 如何使用 SMTP 通过 javax.mail 从 Android 发送电子邮件
- java - org.apache.tomcat.util.descriptor.web.WebXml.setVersion 未知版本字符串 [4.0]。将使用默认版本
- javascript - socket.io-stream 发射 vs on
- windows - 有没有办法将死网络路径别名到 Windows 7 中的本地目录?