当您尝试序列化一个为空(不是null,而是空)的Guid时,如果设置ExcludeDefaultValues = true,则结果将被忽略。 但是,如果您随后设置ExcludeDefaultValues = false,则会生成字符串““
JsConfig.IncludeNullValues = false;
JsConfig.ExcludeDefaultValues = false;
var tt = new { Name="Fred", Value=Guid.Empty, Value2=Guid.NewGuid() };
var test = JSON.stringify(tt);
Console.WriteLine(test);
给予
{"Name":"Fred","Value":"00000000000000000000000000000000","Value2":"598a6e08af224db9a08c2d0e2f6cff11"}
但是我们希望Guid在客户端格式化为Microsoft格式Guid,因此我们添加了一个序列化器:
JsConfig.IncludeNullValues = false;
JsConfig.ExcludeDefaultValues = false;
JsConfig<Guid>.SerializeFn = guid => guid.ToString();
var tt = new { Name="Fred", Value=Guid.Empty, Value2=Guid.NewGuid() };
var test = JSON.stringify(tt);
Console.WriteLine(test);
给予
{"Name":"Fred","Value2":"07a2d8c0-48ad-4e72-b6f3-4fec81c36a1d"}
因此SerializeFn的存在似乎使它忽略了配置设置,因此不可能生成空的Guid。 同样的错误也适用于数字,因此(如果像我们一样)将所有Double的格式都重新设置为小数点后三个位,如果为零,则将其忽略,这是错误的。
有人找到解决方法吗?
答案 0 :(得分:3)
逐步检查源代码,似乎需要显式调出要包含Type
的默认值的SerializeFn
。 Source reference。请注意下面的Type
行。
示例来源
JsConfig<Guid>.IncludeDefaultValue = true;
输出
JsConfig.Reset();
JsConfig.IncludeNullValues = false;
JsConfig.ExcludeDefaultValues = false;
JsConfig<Guid>.SerializeFn = guid => guid.ToString();
JsConfig<Guid>.IncludeDefaultValue = true;
var tt = new { Name = "Fred", Value = Guid.Empty, Value2 = Guid.NewGuid() };
var test = tt.ToJson();
Console.WriteLine(test);
您的问题陈述:Gistlyn:请注意不如何在控制台中返回默认GUID。
上面提出的答案:Gistlyn:请注意这样做如何在控制台中返回默认GUID。