如何在MVC4中强制WebAPI在json结果中将空字符串呈现为空

时间:2013-11-24 20:49:49

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

如何在json结果中的ASP.NET MVC4 Web API v.1中将空字符串属性呈现为空字符串? WebAPI将它们呈现为

"myproperty": null

如何将其渲染为

"myproperty": ""

控制器

public class Customer {
   public string myproperty { get; set; }
   }

    public class CustomersController : ApiController
    {
        public HttpResponseMessage Get()
        {
            var cust = new Customer();
            return Request.CreateResponse(HttpStatusCode.OK,
               new { customers = cust.ToArray() });
        }
     }

对象是嵌套的,包含许多字符串属性。在构造函数中将它们全部设置为空字符串似乎很难看。 API调用者需要空字符串或0代表小数,它不喜欢任何值中的null常量。

4 个答案:

答案 0 :(得分:8)

你可以像这样装饰你的房产:

[JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]
[DefaultValue("")]
public string myproperty{ get; set; }

请注意,您可以将默认值处理设置为填充全局配置,如下所示:

GlobalConfiguration
.Configuration
.Formatters
.JsonFormatter
.SerializerSettings
.DefaultValueHandling = Newtonsoft.Json.DefaultValueHandling.Populate;

所以,你不需要将它装饰到每个属性。您只需要使用DefaultValue

答案 1 :(得分:2)

public class Customer {
   private string _myproperty = String.Empty;
   public string myproperty 
   { 
      get { return _myproperty; }; 
      set { _myproperty = value ?? String.Empty; } 
   }
}

答案 2 :(得分:0)

我给了一点开销,但解决了我的问题

DataTable dt = (new tst()).Gettable();
            string s = string.Empty;
            s = Newtonsoft.Json.JsonConvert.SerializeObject(dt);
           s= s.Replace("null", "\"\"");
            Object obj = Newtonsoft.Json.JsonConvert.DeserializeObject(s);
            return Ok(obj);

答案 3 :(得分:-5)

默认情况下,web api的工作原理如下...... 你不需要改变