我想序列化我的类的所有属性,但希望在返回响应时隐藏一些属性。自定义Json序列化器通过忽略类属性来序列化和反序列化所有属性
我使用NewtonSoft.Json.Net进行序列化。
例如,在下面的类中,我想序列化两个属性,但我只想返回PlaceName。
有没有办法做到这一点?
[DataContract]
public class Place
{
[DataMember(EmitDefaultValue = false)]
public int PlaceId { get; set; }
[DataMember(EmitDefaultValue = false, Order = 1)]
public string PlaceName { get; set; }
}
编辑1:
下面是我目前的JSON文件。
[
{
"placeId": 1,
"placeName": "Malacca"
},
{
"placeId": 2,
"placeName": "Kuala Lumpur"
},
{
"placeId": 3,
"placeName": "Genting Highlands"
},
{
"placeId": 4,
"placeName": "Singapore"
},
{
"placeId": 5,
"placeName": "Penang"
},
{
"placeId": 6,
"placeName": "Perak"
},
{
"placeId": 8,
"placeName": "Selangor"
}
]
编辑2:找到了解决办法
我发现了一些研究解决方案。
我创建了一个自定义合约解析器来序列化和反序列化所有属性并传递它。
下面是我的代码
public class AllPropertiesResolver : DefaultContractResolver
{
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
JsonProperty property = base.CreateProperty(member, memberSerialization);
property.Ignored = false;
return property;
}
}
及以下,我把它称为代码。
JsonConvert.SerializeObject(object, new JsonSerializerSettings() { ContractResolver = new AllPropertiesResolver() });
JsonConvert.DeserializeObject<T>(stream, new JsonSerializerSettings() { ContractResolver = new AllPropertiesResolver() });
谢谢大家的回应。
您可以发布您的JSON文件? – Yanga
可能你可以使用匿名类,比如'return new {PlaceName = place.PlaceName};'?这是一个有点特定的解决方案,但无论如何... – feeeper
@feeeper我序列化对象的泛型类。将每个属性映射到一个匿名对象是不可能的。但是我很欣赏这个建议。 –