我有来自C#第三方库的复杂对象。
为了解释的目的,我的复杂对象看起来像这样:
myobject.Property1
myobject.Property2
myobject.Property3.SubPropertyA
myobject.Property3.SomeMethodX()
是否可以将Json.Net配置为在myobject
的序列化中包含方法的名称及其返回值?
我想要实现这样的JSON:
{
"Property1" : "valueOfProperty1" ,
"Property2" : "valueOfProperty2" ,
"Property3" : {
"SubPropertyA" : "valueOfSubPropertyA",
"SomeMethodX" : {JSON serialization of SomeMethodX's return value}
}
}
我正在考虑使用Reflection通过覆盖SomeMethodX
CreateProperty
方法来调用DefaultContractResolver
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
JsonProperty property = base.CreateProperty(member, memberSerialization);
MethodInfo getServiceMethod = property.DeclaringType.GetMethod("MethodX");
MethodInfo genericGetServiceMethod = getServiceMethod.MakeGenericMethod(new Type[] { typeof(SomeMethodXReturnType) });//SomeMethodX is generic
// To invoke the method I need a reference to the actual object, I don't know if it can be accessed through the available arguments????
object returnValue = genericGetServiceMethod.Invoke(targetedObject, null);
//next I guess I have to add the return value as an extra property for further serialization
//I don't know how
return property;
}
我再次提到我正在尝试从库中序列化一个对象,并且 不是一些自定义对象。
由于我缺乏Json.Net的经验,我不知道自己是否走在正确的轨道上。