クラスのすべてのプロパティをシリアル化する必要がありますが、応答を返しながらいくつかのプロパティを非表示にします。カスタム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; }
}
EDIT 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"
}
]
EDIT 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ジェネリッククラスのオブジェクトをシリアル化しています。各プロパティを匿名オブジェクトにマッピングすることはできません。私は提案に感謝します。 –