Webapi+Newtonsoft.Json 几个简单运用

45 篇文章 1 订阅
11 篇文章 0 订阅

类:
public class UserInfo
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }

        public DateTime Date { get; set; } = DateTime.Now;
    }

api接口:
public class ValuesController : ApiController
{
public List<UserInfo> GetUserList()
        {
            List<UserInfo> List = new List<Controllers.UserInfo>() {
                 new UserInfo() { ID =1, Age=18, Name="123" },
                 new UserInfo() { ID =2, Age=19, Name="456" },
                 new UserInfo() { ID =3, Age=17, Name="789" },
                 new UserInfo() { ID =4, Age=18, Name="444" },
            };

            return List;
        }
}

调用http://localhost:54561/api/values返回值:
[{"ID":1,"Name":"123","Age":18,"Date":"2019-02-27T09:36:17.702676+08:00"},{"ID":2,"Name":"456","Age":19,"Date":"2019-02-27T09:36:17.702676+08:00"},{"ID":3,"Name":"789","Age":17,"Date":"2019-02-27T09:36:17.702676+08:00"},{"ID":4,"Name":"444","Age":18,"Date":"2019-02-27T09:36:17.702676+08:00"}]

正常webapi是直接返回xml,在启动文件中配置了下

//让API直接出json数据,放弃XML格式
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();

返回的只有json。

 

引用Newtonsoft.Json

OptIn

所有的成员不会被序列化,类中的成员只有标有特性JsonProperty的才会被序列化,

当类的成员很多,但客户端仅仅需要一部分数据时,属性加上特性JsonProperty,返回Json的时候就出标记了特性的属性。

类加上特性[JsonObject(MemberSerialization.OptIn)]

属性ID加上特性[JsonProperty]

[{"ID":1},{"ID":2},{"ID":3},{"ID":4}]

 

OptOut

默认值,类中所有公有成员会被序列化,如果不想被序列化,可以用特性JsonIgnore,

如果不需要某些属性,属性上加上JsonIgnore,返回Json的时候不会输出该属性

类加上特性[JsonObject(MemberSerialization.OptOut)]

属性ID加上特性[JsonIgnore]

[{"Name":"123","Age":18,"Date":"2019-02-27T10:03:06.0355105+08:00"},{"Name":"456","Age":19,"Date":"2019-02-27T10:03:06.0355105+08:00"},{"Name":"789","Age":17,"Date":"2019-02-27T10:03:06.0355105+08:00"},{"Name":"444","Age":18,"Date":"2019-02-27T10:03:06.0355105+08:00"}]

 

要修改输出的名字,不就能改Class的属性的名字

属性Date加上特性[JsonProperty(PropertyName = "Time")]

[{"ID":1,"Name":"123","Age":18,"Time":"2019-02-27T10:30:27.4491914+08:00"},{"ID":2,"Name":"456","Age":19,"Time":"2019-02-27T10:30:27.4491914+08:00"},{"ID":3,"Name":"789","Age":17,"Time":"2019-02-27T10:30:27.4491914+08:00"},{"ID":4,"Name":"444","Age":18,"Time":"2019-02-27T10:30:27.4491914+08:00"}]

Data变成了Time

 

添加一个枚举

public enum Sex:byte
    {
        女 = 0,
        男 = 1
    }

类加入枚举属性:
        public Sex Sex { get; set; } = (Sex)1;//给个默认值

[{"ID":1,"Name":"123","Age":18,"Date":"2019-02-27T10:47:38.8418998+08:00","Sex":1},{"ID":2,"Name":"456","Age":19,"Date":"2019-02-27T10:47:38.8418998+08:00","Sex":1},{"ID":3,"Name":"789","Age":17,"Date":"2019-02-27T10:47:38.8418998+08:00","Sex":1},{"ID":4,"Name":"444","Age":18,"Date":"2019-02-27T10:47:38.8418998+08:00","Sex":1}]

枚举属性加入:[JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]

[{"ID":1,"Name":"123","Age":18,"Date":"2019-02-27T10:47:38.8418998+08:00","Sex":"男"},{"ID":2,"Name":"456","Age":19,"Date":"2019-02-27T10:47:38.8418998+08:00","Sex":"男"},{"ID":3,"Name":"789","Age":17,"Date":"2019-02-27T10:47:38.8418998+08:00","Sex":"男"},{"ID":4,"Name":"444","Age":18,"Date":"2019-02-27T10:47:38.8418998+08:00","Sex":"男"}]

 

 

排序

[JsonProperty(Order = 0)]

[JsonProperty(Order = 1)]

[JsonProperty(Order = 3)]

给属性加上以上特性即可排序。

 

时间格式化

原始格式:"Date":"2019-02-27T10:47:38.8418998+08:00"

1.Global.asax

var format = GlobalConfiguration.Configuration.Formatters;
            format.JsonFormatter.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";

 

2.格式化类

/// <summary>
/// 自定义时间格式化
/// </summary>
public class SelfDateTimeFormat : DateTimeConverterBase
{
    public IsoDateTimeConverter TimeConvert = null;

    public SelfDateTimeFormat()
    {

        TimeConvert = new IsoDateTimeConverter
        {
            DateTimeFormat = "yyyy-MM-dd HH:mm:ss"
        };
    }

    //重写
    public override object ReadJson(Newtonsoft.Json.JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer)
    {

        return TimeConvert.ReadJson(reader, objectType, existingValue, serializer);
    }

    //重写
    public override void WriteJson(Newtonsoft.Json.JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer)
    {

        TimeConvert.WriteJson(writer, value, serializer);
    }
}

给时间属性加上特性:[JsonConverter(typeof(SelfDateTimeFormat))]

 

 

 

根据参数设置返回格式
format.JsonFormatter.MediaTypeMappings.Add(new QueryStringMapping("type", "json", "application/json"));
format.XmlFormatter.MediaTypeMappings.Add(new QueryStringMapping("type", "xml", "application/xml"));

[{"ID":2,"Name":"456","Date":"2019-04-09 16:12:20","Sex":"男"}]

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值