使用Linq to Sql自动序列化

时间:2012-11-12 07:49:40

标签: c# linq-to-sql serialization xml-serialization

有没有办法在表格中存储数据:

http://pasteboard.s3.amazonaws.com/images/LDTcQpG.png

内部SettingsModel列,在Linq-to-Sql中定义,如下所示:

http://pasteboard.s3.amazonaws.com/images/LDXSPiM.png

并且DataContext选项也转为:

http://pasteboard.s3.amazonaws.com/images/LE1ddhn.png

使用如下定义的SettingsModel类:

namespace ElQueue.DataClasses
{
    [DataContract]
    public sealed class SettingsModel
    {
        [DataMember(IsRequired = true)]
        public int[] VideoMediaData { get; set; }
    }
}
这样吗? ...

using (SomeDataContext dataContext = new SomeDataContext())
{
    SettingsModel m = new SettingsModel();
    m.VideoMediaData = new int[] { 1, 2, 3 };
    dataContext.MainTableSettings.InsertOnSubmit(new MainTableSetting() { SettingsModel = m });
    dataContext.SubmitChanges();
}

using (SomeDataContext dataContext = new SomeDataContext())
{
    var r = dataContext.MainTableSettings.Single();
}

你看,上面的代码无法正常工作,它抛出异常,表示它无法将字符串转换为MainTableSetting,这意味着要么无法保存所有序列化数据,要么无法将其反序列化。

我需要一些建议,当我访问数据库时,如何将此Linq-to-Sql指向实际执行序列化(反之亦然)。

1 个答案:

答案 0 :(得分:4)

  

虽然您可以将XElement和XDocument映射到SQL Server,如“类型映射运行时行为矩阵”中所示,但System.Data.Linq.DataContext.CreateDatabase方法具有无默认SQL Server类型映射这些类型。

     

如果一个类实现 Parse() ToString(),则可以将该对象映射到任何SQL文本类型(CHAR,NCHAR,VARCHAR,NVARCHAR,TEXT, NTEXT,XML)。通过将 ToString()返回的值发送到映射的数据库列,该对象存储在数据库中。通过对数据库返回的字符串调用 Parse()来重建对象。

     

http://msdn.microsoft.com/en-us/library/bb386947.aspx#TextMapping

public sealed class SettingsModel
{
    // ...

    public static SettingsModel Parse(string source)
    {
        SettingsModel res;

        // Deserialise the object

        return res;
    }
}