我有一个 WCF 方法,它接受“时间戳”列表
public bool SyncTimestamps(IList<Timestamp> timestamps)
在我的一生中,我无法让客户端以它喜欢使用 RestSharp 的格式将值传递给主机。问题似乎出在日期格式上。
尝试1
var request = new RestRequest("Timestamp/SyncTimestamps", Method.POST);
request.RequestFormat = DataFormat.Json;
request.AddBody(timestamps);
Output 1
"[{\"ID\":1,\"JobId\":654321,\"TimestampSelected\":\"2013-08-05T13:51:13.6201529Z\",\"TimestampActual\":\"2013-08-05T13:51:13.6201529Z\",\"Type\":1,\"Active\":false}]"
Error 1
日期时间内容 '2013-08-05T13:51:13.6201529Z' 不以
'/Date(' 并按照 JSON 的要求以 ')/' 结尾。'
我读到这是 RestSharp 序列化器的问题,所以我用 Json.Net 替换了它,它产生了略有不同的日期字符串。
尝试2
var request = new RestRequest("Timestamp/SyncTimestamps", Method.POST);
request.RequestFormat = DataFormat.Json;
request.AddBody(JsonConvert.SerializeObject(timestamps));
Output 2
{application/json="[{\"ID\":1,\"JobId\":654321,\"TimestampSelected\":\"2013-08-05T14:54:33.9261815+01:00\",\"TimestampActual\":\"2013-08-05T14:54:33.9251814+01:00\",\"Type\":1,\"Active\":false}]"}
Error 2
The exception message is 'Expecting state 'Element'..
Encountered 'Text' with name '', namespace ''. '. See server logs for more details.
The exception stack trace is:
at ReadArrayOfTimestampFromJson(XmlReaderDelegator , XmlObjectSerializerReadContextComplexJson , XmlDictionaryString , XmlDictionaryString , CollectionDataContract )
at System.Runtime.Serialization.Json.JsonCollectionDataContract.ReadJsonValueCore(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson context)
at System.Runtime.Serialization.Json.JsonDataContract.ReadJsonValue(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson context) at
任何人都可以建议一种方法来生成 WCF 服务乐意接受和反序列化的日期格式吗? MSDN 上的文档声明需要以下格式。
DateTime 值以 JSON 字符串的形式显示
“/Date(700000+0500)/”,其中第一个数字(示例中为 700000
提供)是 GMT 时区的毫秒数,常规
(非夏令时)自 1970 年 1 月 1 日午夜以来的时间。
UPDATE :
我发现一个设置作为 JSON.Net 的一部分,允许我将日期传输为 WCF 似乎要求的格式。
var settings = new JsonSerializerSettings() { DateFormatHandling = DateFormatHandling.MicrosoftDateFormat };
JsonConvert.SerializeObject(obj, settings);
这似乎已经完成了创建序列化字符串的工作。
{application/json="[{\"ID\":1,\"JobId\":654321,\"TimestampSelected\":\"\\/Date(1375713542908+0100)\\/\",\"TimestampActual\":\"\\/Date(1375713542908+0100)\\/\",\"Type\":1,\"Active\":false}]"}
然而,我的服务仍然拒绝这一点,并显示“异常消息是‘期望状态’元素’..”