我有一个具有以下属性的ac#对象“ Product”:偏移量
在数据库中,该字段的类型为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属性。
从数据库中检索值时,我将仅在代码中使用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属性设置为与JSON格式不匹配的字符串,则JsonConvert将抛出JsonReaderException。我认为这是预期的。为了进一步说明,您可以将属性命名为OffsetJson。
但是,在这种简单的情况下,我无法看到将您的信息存储为JSON的好处。如果使用关系数据库,则最好将值存储在单独的列中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句