Serialize DateTime属性IsoDateTimeConverter和ServerProtocolViolation错误

时间:2018-03-20 13:27:06

标签: c# datetime serialization json.net

我有这个课程:

    public class EncuestaRespuesta
    {
        public string idCaso { get; set; }
        public string tipoEncuesta { get; set; }
        public string codMovimiento { get; set; }
        public string motivoRetirada { get; set; }
        public string duracion { get; set; }
        public DateTime fechaHora { get; set; }
        public string gestor { get; set; }
        public List<RespuestasEncuesta> listRespuestasEncuestas { get; set;}
    }

    public class RespuestasEncuesta
    {
        public string pregunta { get; set; }
        public string respuesta { get; set; }
        public string numOrdenTrabajo { get; set; }
    }

使用JSON.NET,

    // https://www.newtonsoft.com/json/help/html/NullValueHandlingIgnore.htm
    var settings = new JsonSerializerSettings
    {
        NullValueHandling = NullValueHandling.Ignore
    };

    settings.Converters.Add(new Newtonsoft.Json.Converters.IsoDateTimeConverter()); 

    var json = JsonConvert.SerializeObject(request, Formatting.Indented, settings);

当我调用REST API(HttpClient PostAsync)时,我收到错误:

  

&#34;服务器提交了协议违规。   节= ResponseStatusLine&#34;错误:ServerProtocolViolation

我不知道为什么。我的JSON字符串:

 {
  "idCaso": "5009E000007Hp94QAD",
  "codMovimiento": "1",
  "motivoRetirada": "2",
  "duracion": "0",
  "fechaHora": "2018-03-20T12:56:36.4841861Z",
  "gestor": "GESTOR SALESFORCE",
  "tipoEncuesta": "T3_1018_RM",
  "listRespuestasEncuestas": [
    {
      "numOrdenTrabajo": "",
      "pregunta": "",
      "respuesta": ""
    }
  ]
}

我想要这个JSON字符串,在我的测试中没问题:

{
  "idCaso": "5009E000007Hp94QAC",
  "codMovimiento": "1",
  "motivoRetirada": "1",
  "duracion": "",
  "fechaHora": "2018-02-06T14:40:43.511Z",
  "gestor": "",
  "tipoEncuesta": "T3_1018_RM",
  "listRespuestasEncuestas": [
    {
      "numOrdenTrabajo": "",
      "pregunta": "",
      "respuesta": ""
    }
  ]
}

问题:日期时间字段:

"fechaHora": "2018-03-20T12:56:36.4841861Z",

错误

"fechaHora": "2018-02-06T14:40:43.511Z"

确定

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我将IsoDateTimeConverterDateTimeFormat

一起使用
// https://www.newtonsoft.com/json/help/html/NullValueHandlingIgnore.htm
var settings = new JsonSerializerSettings
{
    NullValueHandling = NullValueHandling.Ignore
};

settings.Converters.Add(new Newtonsoft.Json.Converters.IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-ddTHH:mm:ss.FFFZ" });

var json = JsonConvert.SerializeObject(request, Formatting.Indented, settings);

日期JSON

https://www.newtonsoft.com/json/help/html/DatesInJSON.htm

how to force netwtonsoft json serializer to serialize datetime property to string?

Serializing multiple DateTime properties in the same class using different formats for each one

Newtonsoft.json IsoDateTimeConverter and DateFormatHandling

日期时间格式UTC

How can I format DateTime to web UTC format?

https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings