2016-05-04 3 views
0

У меня есть C# POCO, который выглядит следующим образомРеализация JSON ShouldSerialize в WebAPI

public class Notice 
{ 
    public bool ShouldSerializeUserId { get;set; } 
    public int UserId { get; set; } 

    public bool ShouldSerializeLogin { get; set; } 
    public string Login { get; set; } 

    public string Message { get;set; } 
} 

мне нужно, чтобы иметь возможность скрыть и показать UserId и Вход свойства основаны на определенном состоянии и возвращать их как JSON в WebAPI. Однако, как-то WebAPI JsonSerializer не чтит свойство ShouldSerialize. Как заставить этот код работать? Я использую ASP.NET 5.

using Microsoft.AspNet.Mvc; 

public class MyController : Controller 
{ 
    public IActionResult Get() 
    { 
     List<Notice> notices = NoticeRepository.GetNotices(); 
     //need to show or hide UserId or Login here... 
     return Json(notices); 
    } 
} 
+0

Вы помечено ваш вопрос [тег: asp.net-веб-API], но ваш код, кажется, из [тег: asp.net-MVC]. Для чего вы ищете ответ? Они используют разные сериализаторы JSON. – dbc

+0

@dbc, я специально ищу ответа на web-api, однако в ASP.NET 5 оба интерфейса web-api и mvc объединены вместе. –

ответ

2

Я думаю, что вам нужно использовать ShouldSerialize**method, а не собственность.

Что-то вроде:

public class Notice 
{ 
    public int UserId { get; set; } 

    public bool ShouldSerializeUserId() 
    { 
     return // your condition; 
    } 

    public string Login { get; set; } 

    public bool ShouldSerializeLogin () 
    { 
     return // your condition; 
    } 

    public string Message { get;set; } 
} 

Надеется, что это поможет.

+0

Да, метод работает! Спасибо. –

1

ASP.NET Web API использует отражение для вызова ShouldSerialize * метод для определения (не собственность) если конкретные общественные свойства должны быть упорядочены.

Например,

private bool _shouldSerializeUserId; 
// You can this method to set value. 
public void SetShouldSerializeUserId(bool shouldSerializeUserId) 
{ 
    _shouldSerializeUserId = shouldSerialize; 
} 
public bool ShouldSerializeUserId() 
{ 
    return _shouldSerializeUserId; 
} 
Смежные вопросы