在開發web api的時候 遇到一個要把string未賦值默認為null的情況改成默認為空字符串的需求
這種情況就需要自定義json序列話的 解析協議了
Newtonsoft.Json默認的解析協議是DefaultContractResolver
需要繼承DefaultContractResolver 自定義解析協議了
public class NullableValuePRovider : IValueProvider { private readonly object _defaultValue; private readonly IValueProvider _underlyingValueProvider; public NullableValueProvider(MemberInfo memberInfo, Type underlyingType) { _underlyingValueProvider = new DynamicValueProvider(memberInfo); if (underlyingType != typeof(string)) { _defaultValue = Activator.CreateInstance(underlyingType); } else { _defaultValue = string.Empty; // 特殊處理 } } public void SetValue(object target, object value) { _underlyingValueProvider.SetValue(target, value); } public object GetValue(object target) { return _underlyingValueProvider.GetValue(target) ?? _defaultValue; } } public class SpecialContractResolver : DefaultContractResolver { protected override IValueProvider CreateMemberValueProvider(MemberInfo member) { if (member.MemberType == MemberTypes.Property) { var pi = (PropertyInfo)member; if (pi.PropertyType == typeof(string)) { return new NullableValueProvider(member, pi.PropertyType); } } else if (member.MemberType == MemberTypes.Field) { var fi = (FieldInfo)member; if (fi.FieldType == typeof(string)) { return new NullableValueProvider(member, fi.FieldType); } } return base.CreateMemberValueProvider(member); } }
參考
新聞熱點
疑難解答