C#返回iso datetime而不是json datetime

时间:2018-07-18 10:13:31

标签: c# json asp.net-mvc-4

我有两个项目,一个是服务器,另一个是调用者。我的服务器正在从其函数返回一个对象,当调用者收到结果时,它就以json形式接收数据。

班级

public class MyClass
{
    public int myInt{ get; set; }
    public string myString{ get; set; }
    public DateTime myDate{ get; set; }
}

服务器端

[HttpPost]
public async Task<ActionResult> Index()
{
     var tmpResult = await . . .
     return new MyClass();
}

主叫方

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.Method = "POST";
Stream dataStream = webRequest.GetRequestStream();
WebResponse response = webRequest.GetResponse();
dataStream = response.GetResponseStream();
using (StreamReader reader = new StreamReader(dataStream))
{
     responseFromServer = reader.ReadToEnd();
     reader.Close();
}

目前,我的答复是:

  

{“ myInt”:0,“ myString”:“ a”,“ myDate”:“ / Date(1531908040342)/”}

我想要实现的目标是:

  

{“ myInt”:0,“ myString”:“ a”,“ myDate”:“ 2018-07-18 00:00:00.000”}

我认为,通过将JsonConverter添加到类中,可以解决我的问题。

public class MyClass
{
    public int myInt{ get; set; }
    public string myString{ get; set; }

    [JsonConverter(typeof(CustomDateTimeConverter))]
    public DateTime myDate{ get; set; }
}

class CustomDateTimeConverter : IsoDateTimeConverter
{
    public CustomDateTimeConverter()
    {
        base.DateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.fff";
    }
}

但是,我得到的答复还是一样。我想知道如何更改模型以使其实现吗?还是应该将响应转换为对象,然后再次重新序列化?

*添加:我希望我不需要键入任何类似DateTime.ToString()的内容。因为这样,我需要将响应转换为对象,然后用1键入1。我希望我能得到的是来自服务器的响应,已经将其转换为ISO格式而不是Json格式

1 个答案:

答案 0 :(得分:0)

尝试使用以下设置将对象转换为JSON:

var settings = new JsonSerializerSettings
{
    DateFormatHandling = DateFormatHandling.IsoDateFormat
};

string json = JsonConvert.SerializeObject(data, settings);

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