gpt4 book ai didi

c# - JSON 无法序列化/反序列化数据表列的默认值

转载 作者:太空宇宙 更新时间:2023-11-03 15:08:36 25 4
gpt4 key购买 nike

我有一个数据表,其中数据表的某些列在创建新行时必须放置此默认值,直到用户更改它为止。我使用 JSON 序列化和反序列化数据表以进行保存/加载。使用 JSON 的序列化/反序列化成功地将以前的数据加载到数据表中,但它不会带回默认值,并且它们不会用于创建新行。有没有办法强制 JSON 序列化/反序列化数据表的默认值?谢谢。示例代码如下:

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DataTable dt = new DataTable("ff");
DataColumn col1 = new DataColumn();
col1.ColumnName = "dd";
col1.DataType = typeof(bool);
col1.DefaultValue = true;
dt.Columns.Add(col1);
Console.WriteLine("Before Serialization");
Console.WriteLine(dt.NewRow()["dd"].ToString());//brings True
string serializedStr = Newtonsoft.Json.JsonConvert.SerializeObject(dt, serializationetting);
DataTable deserializedDt = Newtonsoft.Json.JsonConvert.DeserializeObject<DataTable>(serializedStr, serializationetting) as DataTable;
deserializedDt.Rows.Add(deserializedDt.NewRow());
Console.WriteLine("After Serialization");
Console.WriteLine(deserializedDt.NewRow()["dd"]);//brings empty
Console.ReadLine();

}
public static JsonSerializerSettings serializationetting = new JsonSerializerSettings()
{
TypeNameAssemblyFormat = FormatterAssemblyStyle.Full,
TypeNameHandling = TypeNameHandling.Objects,
Formatting = Formatting.Indented,

};
}

}

最佳答案

序列化时,您会丢失一些默认列信息。为了保留它,您似乎还必须序列化 DataColumn 对象,例如:

string serializedDataCol = Newtonsoft.Json.JsonConvert.SerializeObject(col1, serializationSetting);

稍后您可以将其反序列化并添加回新的 DataTable。我不知道有没有办法使用 NewtonSoft 来避免这种行为,但您可能会创建一个自定义契约(Contract)解析器,它会在 DataTable 上自动为您处理这种事情,或者,您可以创建另一个用 DefaultValue 装饰的类,该类将由 OOB 契约(Contract)解析器处理。

关于c# - JSON 无法序列化/反序列化数据表列的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42189132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com