我想序列化我的類的所有屬性,但希望在返回響應時隱藏一些屬性。自定義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我序列化對象的泛型類。將每個屬性映射到一個匿名對象是不可能的。但是我很欣賞這個建議。 –