私はカスタム特定のAPI呼び出しのためにjsonのシリアル化を使用しました。 しかし、グローバルフォーマットを上書きします。このAPI呼び出しの後、または他のすべてのAPI呼び出しの開始時にこのシリアル化をリセットする必要があります。各Web API呼び出しの後にシリアル化をリセットする方法:C#
public class ShouldSerializeContractResolver : CamelCasePropertyNamesContractResolver
{
private List<Serializable> _serializables;
public ShouldSerializeContractResolver(List<Serializable> serializable)
{
_serializables = serializable;
}
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
JsonProperty property = base.CreateProperty(member, memberSerialization);
foreach (var item in _serializables)
{
if (item.ObjectType.Contains(property.DeclaringType) && !item.Serialize.Contains(property.PropertyName))
{
property.ShouldSerialize =
instance =>
{
return false;
};
}
}
return property;
}
}
そして、下図のように、私は直接APIコントローラからこのシリアライザと呼ば:
var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
List<Serializable> serializableList = new List<Serializable>(); // Model class for storing list of Model classes and corresponding serializable objects as string
List<Type> listObjectType = new List<Type>();
List<string> serialize = new List<string>();
listObjectType.Add(typeof(ModelClassName));
serialize.Add("classObject1");
serialize.Add("classObject2");
serializableList.Add(new Serializable
{
Serialize = serialize,
ObjectType = listObjectType
});
json.SerializerSettings.ContractResolver = new ShouldSerializeContractResolver(serializableList); // This is where the serializer is modified
リセットしますか?どのように使っているのか教えていただけますか? – Amy
はいAmy、シリアル化を特定のAPIに限定する必要があります。したがって、新しいAPIが呼び出されると、このシリアル化設定は適用されません。上記の質問の使用方法を更新しました – Vidyesh