neuecc / Utf8Json

Definitely Fastest and Zero Allocation JSON Serializer for C#(NET, .NET Core, Unity, Xamarin).
MIT License
2.35k stars 266 forks source link

[Question]Handle Number field with 'null' value #237

Open oOtroyOo opened 3 years ago

oOtroyOo commented 3 years ago

For example. We have some apis like this

{
    "num":1
}

And I have a type contains int num;

But some how,(due to server developing which I'm uncertain), our srever could possible to return value suchas

{
    "num":  null
}

then my client will throw a Exception. I don't want to change all my types into nullable values , suchas int? num , By fix this issue , I changed codes follows:

public struct JsonReader
{
        public long ReadInt64()
        {
            SkipWhiteSpace();

            int readCount;
            var v = NumberConverter.ReadInt64(bytes, offset, out readCount);
            if (readCount == 0)
            {
+            if (nullTokenSegment != ReadStringSegmentUnsafe())
                    throw CreateParsingException("Number Token");
            }

            offset += readCount;
            return v;
        }
}

The purpose is to check the value is null , so i can skip this value by defualt .

Is there a better way to solve the issue ?

tomsoftware commented 3 years ago

I think the best way is to as Nullable in you c# class (or you can use the ? as shortcut) and use a proxy getter...

     public class Test
     {
        [IgnoreDataMember]
        public int Num { get; set; }

        [DataMember(Name = "num")]
        public int? RealNum
        {
            get
            {
                return this.Num;
            }

            set
            {
                this.Num = value.GetValueOrDefault();
            }
        }
    }