私はJson.NET用のカスタムValueProviderを作成しようとしています。これはすべてのオブジェクトのシリアル化をスキップし、代わりに主キーを表すGuid型のプロパティを返します参照)。オブジェクトをGuidに変換するためのJson.NETカスタムValueProvider
例:
jsonData: {
myObject: {
id: "23e23-2gg5-6y666556-y6yg33",
property2: ""
}
}
になる必要があります。
jsonData: {
myObjectId: "23e23-2gg5-6y666556-y6yg33"
}
は、これは私がこれまでに書いたコードです。私はそれが動作するように非常に近いですが、私の中でCustomValueProvider
私はオブジェクトの値を取得することができないようです。どうやってやるの?
private class CustomValueProvider : IValueProvider
{
private readonly MemberInfo _member;
public CustomValueProvider(MemberInfo member)
{
_member = member;
}
public void SetValue(object target, object value)
{
throw new NotImplementedException();
}
public object GetValue(object target)
{
return // WHAT HERE??
}
}
private class CustomResolver : CamelCasePropertyNamesContractResolver
{
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
var jsonProperty = base.CreateProperty(member, memberSerialization);
if (jsonProperty.PropertyType.IsClass && jsonProperty.PropertyType != typeof(string))
{
jsonProperty = new JsonProperty
{
PropertyName = member.Name.ToFirstCharLower() + "Id",
Readable = true,
ShouldSerialize = value => true,
PropertyType = typeof(Guid),
ValueProvider = new CustomValueProvider(member)
};
}
return jsonProperty;
}
}
private static readonly JsonSerializerSettings JsonSettings = new JsonSerializerSettings
{
ContractResolver = new CustomResolver(),
Formatting = Formatting.Indented
};
うーん...私は、これは非常に困難であることを期待していませんでした。ありがとう、あなたは私を救った。 – tocqueville