我試圖強制在特定屬性上使用IsoDateTimeConverter。DotnetNuke Web Api - JsonConverter沒有得到使用
我註冊的路線和內容談判:對物業使用
public class RouteMapper : IServiceRouteMapper
{
public void RegisterRoutes(IMapRoute mapRouteManager)
{
mapRouteManager.MapHttpRoute("SbApi", "default", "{controller}/{action}", new[] { "SbApi.Controllers" });
GlobalConfiguration.Configuration.Services.Replace(typeof(System.Net.Http.Formatting.IContentNegotiator), new JsonContentNegotiator());
}
}
public class JsonContentNegotiator : IContentNegotiator
{
public ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerable<MediaTypeFormatter> formatters)
{
var formatter = new JsonMediaTypeFormatter();
formatter.UseDataContractJsonSerializer = false;
var isoDateConverter = formatter.SerializerSettings.Converters
.OfType<IsoDateTimeConverter>()
.FirstOrDefault();
if(isoDateConverter!=null){
formatter.SerializerSettings.Converters.Remove(isoDateConverter);
}
formatter.SerializerSettings.Converters.Add(new IsoDateTimeConverter() { DateTimeFormat = "dd-MM-yyyy" }); // custom date format, to see if the converter is used
var result = new ContentNegotiationResult(formatter, new MediaTypeHeaderValue("application/json"));
return result;
}
}
屬性:
[JsonConverter(typeof(IsoDateTimeConverter))]
public System.DateTime EndDate { get; set; }
串行器的輸出:
"EndDate":"2016-01-01T00:00:00"
如何使它使用IsoDateTimeConverter?
編輯:
我使用自定義IContentNetogiator來實施對XML的使用JSON的。
我只使用自定義日期時間格式來查看轉換是否實際使用。
我真正需要的是ISO格式(具有完整時區),但由於某種原因,我無法執行它。我試圖在CustomDate中設置它,但無濟於事。
public CustomDatetimeConverter()
{
base.DateTimeFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK"; // none of these work..
base.DateTimeFormat = "o";
base.Culture = System.Globalization.CultureInfo.InvariantCulture;
base.DateTimeStyles = System.Globalization.DateTimeStyles.AssumeLocal;
}
編輯2: 無論如何,我得到它的工作排序。由於沒有任何工作,我不需要毫秒的時間,我結束使用以下格式:「yyyy」 - 'MM' - 'dd'T'HH':'mm':'ss.000000zzz「。 「zzz」用於代替「K」,由於某些原因,該「K」不起作用。
這是對一個類中的特定財產或特定財產(同一個名字)在多個類上? – 2014-11-03 15:00:26
這是針對單個課程的特定屬性。 – IronBark 2014-11-03 15:03:11