我有:
class TableEntity
{
public string PartitionKey {get; set;}
public string RowKey {get; set;}
}
class MyEntity : TableEntity
{
[JsonProperty(PropertyName = "myAFieldName")]
public string AField {get; set;}
}
表实体是外部库的一部分,我无法向其添加属性。
我想将 PartitionKey 和 RowKey 的 JsonProperty 设置为:"GroupID"和"ItemID",部分原因是为了隐藏通过 JSON 公开的实现。
我该怎么做?
一般来说,将实体转换为适当的视图模型更容易(我几乎从不将原始实体传递给 JSON/views)。如果此示例只是对象的一部分,并且实际上有一些属性可以将名称与 VM 定义匹配,则可以使用自动映射器更轻松地填充 VM。如果没有任何属性匹配,则实际上更容易为 VM 提供一个构造函数,该构造函数采用实体并将值分配给其属性。
public class MyEntityVM
{
public MyEntityVM(MyEntity entity)
{
this.ItemId = entity.RowKey;
//etc...
}
public string ItemId {get;set;}
public string GroupId {get;set;}
public string MyAFieldName {get;set;
}
您是否尝试使用MetadataTypeAttribute
(https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.metadatatypeattribute(v=vs.110).aspx)?
class TableEntity
{
public string PartitionKey {get; set;}
public string RowKey {get; set;}
}
[MetadataType(typeof(MyEntityMeta))]
class MyEntity : TableEntity
{
public string AField {get; set;}
}
public class MyEntityMeta
{
[JsonProperty(PropertyName = "GroupID")]
public string PartitionKey {get; set;}
[JsonProperty(PropertyName = "myAFieldName")]
public string AField {get; set;}
}
另请参阅:https://github.com/JamesNK/Newtonsoft.Json/issues/405