在数据库中存储/检索JSON字符串,使其易于在代码中使用



我有一个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的好处。如果您使用的是关系数据库,那么您还可以将值存储在单独的列中。

相关内容

  • 没有找到相关文章

最新更新