我正在从BinaryFormatter迁移到Protobuf net(到目前为止,它似乎在存储大小和反序列化时间方面都提供了巨大的改进)。
然而,我遇到的一个问题是,这是双重的吗?[]数组的反序列化形式与序列化的形式不同。数组中的任何null值都会被整体删除,即如果我从一个包含6个元素的数组开始[null,null,1,2,3,null],反序列化后,我最终会得到一个数组[1,2,3]。对于我的程序,我必须以序列化之前完全相同的形式检索这些数组,就像使用BinaryFormatter一样。
到目前为止,我提出的一个解决方案是为每个元素创建两个数组,一个是double[],其中每个元素都有一个值,另一个是bool[],可以用来描述原始值是否为null,但是由于各种原因,这是非常低效的。
我可以在前面的相关问题中看到,ProtoMember可能有一个“SupportNull”选项,但我找不到任何文档清楚地说明如何实现这一点,我自己也无法通过玩来解决这个问题。
任何人能提供的任何帮助都将不胜感激。
它实际上不支持开箱即用,您必须操作RuntimeTypeModel来显式设置它应该允许null。
运行时类型模型。默认[类型(YourObjectType)][(标记)]。SupportNull=真
例子:
var nullable = new ObjectWithNullables() { IntArray = new int?[] { null, 1, 2, null } };
// returns 2 elements out of 4
//var resultA = Deserialize<ObjectWithNullables>(Serialize<ObjectWithNullables>(nullable));
RuntimeTypeModel.Default[typeof(ObjectWithNullables)][1].SupportNull = true;
// returns 4 elements out of 4
var resultA = Deserialize<ObjectWithNullables>(Serialize<ObjectWithNullables>(nullable));
[ProtoContract]
public class ObjectWithNullables
{
[ProtoMember(1)]
public int?[] IntArray { get; set; }
}
using ProtoBuf;
using ProtoBuf.Meta;
using System;
[ProtoContract]
class Foo
{
[ProtoMember(1)]
public double?[] Values { get; set; }
}
static class Program
{
static void Main()
{
// configure the model; SupportNull is not currently available
// on the attributes, so need to tweak the model a little
RuntimeTypeModel.Default.Add(typeof(Foo), true)[1].SupportNull = true;
// invent some data, then clone it (serialize+deserialize)
var obj = new Foo { Values = new double?[] {1,null, 2.5, null, 3}};
var clone = Serializer.DeepClone(obj);
// check we got all the values back
foreach (var value in clone.Values)
{
Console.WriteLine(value);
}
}
}
我要“登录” 而我愿意这样 我也使用Bootstrap4,但不是为了我想做的事情,我在某个地方读到,不使用Bootstrap,自己做更好。 下面是我使用的代码: css: html: 如果可以使用Bootstrap 4完成,我也可以。
问题内容: 我无法理解为什么Java迫使我将()声明为final。这是为什么? 问题答案: 这是一个内部类,传递给它-内部类外部引用的所有变量都需要声明为final才能在内部类中使用。这是因为本地类实例必须维护变量的单独副本,因为它可能会使函数失效。为了避免在相同范围内混淆两个具有相同名称的可修改变量,该变量被强制为不可修改。 只需在调用使用内部类的方法之前执行,然后在内部使用即可。
我是新的java.here是我的代码。我确定我的字符串数组大小与nextint metod使用扫描仪。然后我添加了字符串与nextline metod.它似乎对我是正确的,但我不能看到我的第一个值的数组.这是什么问题在这个代码。
我正在尝试使用urllib.urlencode对python中的词典进行urlencode编码。问题是,我必须对数组进行编码。 结果必须是: 但我得到的结果是: 我试过几种方法,但似乎没有得到正确的结果。 如果我使用对正确的查询字符串进行解码,结果如下: 但是如果我对结果进行编码,我会得到一个错误的结果。有没有办法产生预期的结果?
< b >想改进这个问题?通过编辑此帖子添加详细信息并澄清问题。 我如何用div制作所谓的面具。你好,我正在寻找解决我问题的方法,如果有人能帮助我,我会非常感激。我希望你只能通过div看到背景。如果有人能帮助我,我会非常感激。非常感谢。亚历克斯。
我想将表单域映射到数据库域。 我有两个数组。。 一个数组是数据,包含作为键的表单字段id和作为值的表单字段值。 我还有一个数组,打算用作地图。此数组的键与表单字段相同,值为数据库字段名。 我想做的是遍历数据数组,在数据键与映射键匹配的地方,给数据数组分配一个新的键,这个键就是映射数组的值。 我的问题是怎么做?我尝试了很多不同的方法,现在我完全迷失在其中。