首页 > 解决方案 > 如何使用 /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(在该序列化过程中添加缺失的内容?

标签: c#jsondateserializationrestsharp

解决方案


推荐阅读