我有一个c#对象"Product",其属性名为:Offset
在数据库中,字段类型为nvarchar(50)
我将在其中存储一个JSON值,例如:{"y":0,"m":0、"d":0}
我想知道在我的代码中使用这样的属性的好方法。以下是我目前的做法:
public class Product
{
public int Id {get; set;}
public string Description {get; set;}
public decimal Price {get; set;}
public int OffsetYears { get; set; }
public int OffsetMonths { get; set; }
public int OffsetDays { get; set; }
public string Offset
{
get
{
Offset offset = new Offset()
{
Y = OffsetYears,
M = OffsetMonths,
D = OffsetDays
};
return JsonConvert.SerializeObject(offset);
}
set
{
OffsetObj offset = JsonConvert.DeserializeObject<Offset>(value);
OffsetYears = offset.Y;
OffsetMonths = offset.M;
OffsetDays = offset.D;
}
}
private class OffsetObj
{
public int Y { get; set; }
public int M { get; set; }
public int D { get; set; }
}
}
因此,当我在UI中接受用户的值时,我会设置OffsetYears、OffsetMonths和OffsetDays属性。。所以在我的存储库中,我可以保存Offset。
当从数据库中检索值时,我只需在代码中使用OffsetYears、OffsetMonths和OffsetDays属性。
有没有更好的方法来处理这种事情?我只是觉得我没有利用我所有的c#资源。比如,如果另一个开发人员不小心通过代码设置了Offset,假设任何格式的字符串都可以进入
还是我最好只在数据库中创建3个单独的整数字段,并避免所有这些。。。
我会将值保存在私有类型的字段中。考虑这种方法:
public class Product
{
private OffsetObj _offset = new OffsetObj();
public int Id { get; set; }
public string Description { get; set; }
public decimal Price { get; set; }
public int OffsetYears
{
get { return _offset.Y; }
set { _offset.Y = value; }
}
public int OffsetMonths
{
get { return _offset.M; }
set { _offset.M = value; }
}
public int OffsetDays
{
get { return _offset.D; }
set { _offset.D = value; }
}
public string Offset
{
get
{
return JsonConvert.SerializeObject(_offset);
}
set
{
_offset = JsonConvert.DeserializeObject<OffsetObj>(value);
}
}
private class OffsetObj
{
public int Y { get; set; }
public int M { get; set; }
public int D { get; set; }
}
}
这样,字段offset将保存偏移的值。
比如,如果另一个开发人员不小心通过代码设置了Offset,假设任何格式的字符串都可以进入
如果试图将Offset属性设置为与JSON格式不匹配的字符串,JsonConvert将抛出JsonReaderException。在我看来,这是意料之中的事。为了进一步澄清,您可以将您的财产命名为OffsetJson。
然而,在这种简单的情况下,我看不到将信息存储为JSON的好处。如果您使用的是关系数据库,那么您还可以将值存储在单独的列中。