在我的ASP.NET MVC Web应用程序中,我使用内置的 Controller.Json()
方法来序列化对象并将其发送回客户端以响应AJAX调用 . 被序列化的对象的类继承自具有一些共享属性名称的另一个类 . 这是故意的,因为我需要属性名称来匹配一些反射's happening. I am 692023 those properties in the derived class so that they can be a different type from their same-name counterpart in the base class. Here'是一个简化的例子:
public class BaseModel
{
public string Title { get; set; }
public decimal CleanUpHours { get; set; }
public decimal InstallHours { get; set; }
}
public class DerivedModel : BaseModel
{
public new BucketHoursWithCalculations CleanUpHours { get; set; }
public new BucketHoursWithCalculations InstallHours { get; set; }
}
当我序列化 DerivedModel
的实例时,客户端上的JSON对象仅包含 CleanUpHours
和 InstallHours
的 decimal
版本,而不是我的自定义类 BucketHoursWithCalculations
.
在序列化之前检查Visual Studio中的对象会显示这些属性的基本和派生版本,如此处所示(请原谅所有额外属性 - 上面的示例类比我实际使用的更简单,但原理是一样的):
这是在客户端序列化为JSON后,该对象在客户端上的样子:
如您所见,派生/阴影属性未被序列化,并且基本属性是,但仅在存在名称冲突的情况下(例如,基本模型中的 Title
属性序列化很好) .
我如何仅序列化阴影属性,其中's a name conflict? I don' t相信在基础属性上更改访问修饰符(即从 public
到 protected
或其他东西)将适用于我的情况,因为 BaseModel
由实体框架使用,并且必须具有公共属性 . 任何帮助,将不胜感激 .
1 回答
一种想法是在基础模型上定义用于hours属性的类型参数 . 然后,为
decimal
和BucketHoursWithCalculations
定义派生模型 . 我很想知道BucketHoursWithCalculations
如何序列化为JSON,但无论如何应该序列化CleanUpHours
和InstallHours
属性 .