【发布时间】:2017-04-06 04:25:54
【问题描述】:
我想序列化我的类的所有属性,但想在返回响应时隐藏一些属性。
我正在使用 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文件吗?
-
也许你可以使用像
return new { PlaceName = place.PlaceName };这样的匿名类?这是一个有点具体的解决方案,但无论如何...... -
@feeeper 我正在序列化泛型类中的对象。将每个属性映射到匿名对象是不可能的。我仍然感谢建议。
标签: c# json serialization asp.net-web-api