我想要做的是采用对象构造(例如,实体框架对象),然后将其转换为动态对象(认为 JSON.Net JObject 可能是最合适的),并使用附加属性扩展所述对象用于发送到客户端,或视图模板。
dynamic model = JS.ToJObject(myConcreteInstance);
model.AdditionalValue = "I need this stuff on the client... ";
这就是我所拥有的,它有效,但宁愿没有 try/catch。
//JS.ToJObject
public static JObject ToJObject(object input)
{
try {
//anonymous types throw an exception here
// Could not determine JSON object type for type f__AnonymousType ...
return new JObject(input);
} catch(Exception) {
//fallback to serialize/deserialize, which seems wasteful
var txt = JsonConvert.SerializeObject(
input
,new IsoDateTimeConverter()
,new DataTableConverter()
,new DataSetConverter()
);
return JObject.Parse(txt);
}
}