list中按照指定属性的值序列化

package com.lz.test;


import java.util.ArrayList;
import java.util.Collections;
import java.util.List;


public class CompareTest implements Comparable {
private Integer age;
private String name;

public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int compareTo(Object o){
CompareTest com = (CompareTest)o;
System.out.println("========="+this.age+"------------"+com.getAge());
if(this.age ==null&&com.getAge() == null)
return -1;
if(this.age ==null)
return 1;
if(com.getAge() == null)
return -1;
return this.age.compareTo(com.getAge());
}
public static void main(String[] arg0){
List<CompareTest> list = new ArrayList<CompareTest>();
Integer[] a ={null,10,5,null,null,null,9,4,null,null,1,null,0}; 
for(int i=0;i<13;i++){
CompareTest com = new CompareTest();
com.setName(i+"");
com.setAge(a[i]);
list.add(com);
}
for(int i=0;i<list.size();i++){
CompareTest c = list.get(i);
System.out.print(c.getAge()+"name"+c.getName()+"--");
}

Collections.sort(list); 

//    Collections.reverse(list);      // 按降序排列

System.out.println();
for(CompareTest c:list){
System.out.print(c.getAge()+"name"+c.getName()+"--");
}
}


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您不想使用 JsonIgnore 属性来排除指定字段的序列化,或者使用 JsonProperty 属性来只序列化指定字段,那么您可以使用 ContractResolver 来达到相同的效果。 在 Newtonsoft.Json ,ContractResolver 是负责解析对象类型并创建序列化和反序列化的合同的组件。通过自定义 ContractResolver,您可以控制序列化过程哪些属性应该被序列化,哪些应该被忽略。 例如,以下是一个自定义 ContractResolver,它只序列化指定属性: ```csharp public class PersonContractResolver : DefaultContractResolver { private readonly List<string> _propertiesToSerialize; public PersonContractResolver(List<string> propertiesToSerialize) { _propertiesToSerialize = propertiesToSerialize; } protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) { var property = base.CreateProperty(member, memberSerialization); if (!_propertiesToSerialize.Contains(property.PropertyName)) { property.ShouldSerialize = instance => false; } return property; } } ``` 在上面的代码,我们继承了 Newtonsoft.Json 的默认 ContractResolver,并覆盖了 CreateProperty 方法,在该方法,我们为每个属性创建一个 JsonProperty,并根据 _propertiesToSerialize 列表属性名来决定是否序列化属性。 例如,以下是如何使用 PersonContractResolver 来只序列化 Name 属性的示例: ```csharp var person = new Person { Name = "John Doe", Age = 30 }; var propertiesToSerialize = new List<string> { "Name" }; var settings = new JsonSerializerSettings { ContractResolver = new PersonContractResolver(propertiesToSerialize), Formatting = Formatting.Indented }; var json = JsonConvert.SerializeObject(person, settings); Console.WriteLine(json); ``` 在上面的代码,我们创建了一个 Person 对象,并将其序列化为 JSON 字符串,但是我们只选择序列化 Name 属性序列化过程,我们使用了自定义的 PersonContractResolver,并将其设置为 JsonSerializerSettings 的 ContractResolver 属性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值