سؤال

أنا أستخدم Protobuf-Net R278 في C#، ولاحظت للتو أنه إذا كان لدي فصل مع int الحقل ، لا يتم تعديل الحقل بشكل صحيح إذا تم تعيين قيمة على 0. أي عندما يحصل على قيمته الافتراضية من تعريف الفئة. مثال الفصل:

[ProtoBuf.ProtoContract]
public class
Test
{
    [ProtoBuf.ProtoMember(1)]
    public int Field1 = -1

    [ProtoBuf.ProtoMember(2)]
    public int Field2 = -1;
}

ثم قم بتشغيل هذا الرمز:

var test = new Test();
test.Field1 = 0;
test.Field2 = 0;
MemoryStream ms_out = new MemoryStream();
ProtoBuf.Serializer.Serialize(ms_out, test);
ms_out.Seek(0, SeekOrigin.Begin);
var deser = ProtoBuf.Serializer.Deserialize<Test>(ms_out);

عندما أفعل هذا ، deser لديها Field1 = -1 و Field2 = 2, ، ليس 0. أفعل شيئا خطأ هنا؟

هل كانت مفيدة؟

المحلول

تمشيا مع المواصفات السلكية ، هناك افتراضي ضمني ضمني (يمكن تغييره إلى قيم أخرى مع [DefaultValue(...)]. يمكنك أن تخبرها أن تتصرف كما تريد عن طريق الإعداد IsRequired = true في السمة:

[ProtoBuf.ProtoMember(1, IsRequired = true)]
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top