【问题标题】:c# return iso datetime rather than json datetimec#返回iso datetime而不是json datetime
【发布时间】:2018-12-26 05:13:00
【问题描述】:

我有两个项目,一个是服务器,另一个是调用者。我的服务器正在从它的函数返回一个对象,当调用者收到结果时,它会以 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() 这样的东西。因为这样,我需要将我的响应转换为对象,然后逐个输入。我希望我能得到的是来自服务器的响应,已经将其转换为 ISO 格式而不是 Json 格式

【问题讨论】:

  • @NitinSawant 这将是最坏的情况,因此我需要逐个键入我的类 1,并在 DateTime 字段中将其更改为 DateTime.ToString()。我希望我能找到更好的解决方案
  • 试试这个 var date = DateTime.Now; date.ToString("dd/mm/yyyy h:mm:ss"));
  • @D-johnAnshani 请尝试理解问题的上下文。它是关于 ASP.NET MVC 序列化响应对象的。那里没有手动字符串操作。
  • 您是否定义了 JSON.Net 用作序列化程序,如stackoverflow.com/questions/14591750/… 所示? json序列化的默认还是.NET自带的JavaScriptSerializer。

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


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2016-05-29
    • 2020-01-06
    • 2015-12-10
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 2013-05-14
    相关资源
    最近更新 更多