public override void OnDictionaryBegin(out SirenDataType keyDataType, out SirenDataType valueDataType,out int count) { keyDataType = (SirenDataType)Stream.ReadUInt8(); valueDataType = (SirenDataType)Stream.ReadUInt8(); count = (int)Stream.ReadVarUInt32(); }
public override void OnDictionaryBegin(SirenDataType keyDataType, SirenDataType valueDataType, int count) { Stream.WriteUInt8((byte)keyDataType); Stream.WriteUInt8((byte)valueDataType); Stream.WriteVarUInt32((uint)count); }
public override void OnDictionaryBegin(out SirenDataType keyDataType, out SirenDataType valueDataType, out int count) { keyDataType = (SirenDataType)Stream.ReadUInt8(); valueDataType = (SirenDataType)Stream.ReadUInt8(); count = (int)Stream.ReadVarUInt32(); }
public override void OnListBegin(out SirenDataType dataType, out int count) { JToken currenToken = CurrentToken(); count = currenToken.Count(); mArrayInices.Push(0); dataType = SirenDataType.Bool; }
public override void OnDictionaryBegin(out SirenDataType keyDataType, out SirenDataType valueDataType, out int count) { JToken currenToken = CurrentToken(); count = currenToken.Count() / 2; mArrayInices.Push(0); keyDataType = SirenDataType.Bool; valueDataType = SirenDataType.Bool; }
public override int OnPropertyBegin(string name, ushort id, SirenDataType dataType, out ushort outId, out SirenDataType outDataType) { outId = 0; outDataType = SirenDataType.Struct; JToken outToken; JToken currenToken = CurrentToken(); outToken = currenToken[name]; if (outToken != null) { mJsonTokens.Push(outToken); return(0); } return(-1); }
public override void OnPropertyBegin(string name, ushort id, SirenDataType dataType) { if (id <= 5) { Stream.WriteUInt8((byte)((uint)dataType | ((uint)id << 5))); } else if (id <= 0xFF) { Stream.WriteUInt16((ushort)((uint)dataType | (uint)id << 8 | (0x06 << 5))); } else { Stream.WriteUInt8((byte)((uint)dataType | (0x07 << 5))); Stream.WriteUInt16(id); } }
public override int OnPropertyBegin(string name, ushort id, SirenDataType dataType, out ushort outId, out SirenDataType outDataType) { if (!mIsPropertyWaiting) { ushort tempId; uint raw = Stream.ReadUInt8(); var type = (SirenDataType)(raw & 0x1f); raw >>= 5; if (raw < 6) { tempId = (ushort)raw; } else if (raw == 6) { tempId = Stream.ReadUInt8(); } else { tempId = Stream.ReadUInt16(); } mCurrentPropertyId = tempId; mCurrentPropertyType = type; mIsPropertyWaiting = true; } outId = mCurrentPropertyId; outDataType = mCurrentPropertyType; if (id == mCurrentPropertyId) { mIsPropertyWaiting = false; return(0); } else if (id < mCurrentPropertyId) { return(-1); } mIsPropertyWaiting = false; return(1); }
public override int OnPropertyBegin(string name, ushort id, SirenDataType dataType, out ushort outId, out SirenDataType outDataType) { if (!mIsPropertyWaiting) { ushort tempId; uint raw = Stream.ReadUInt8(); var type = (SirenDataType)(raw & 0x1f); raw >>= 5; if (raw < 6) { tempId = (ushort)raw; } else if (raw == 6) { tempId = Stream.ReadUInt8(); } else { tempId = Stream.ReadUInt16(); } mCurrentPropertyId = tempId; mCurrentPropertyType = type; mIsPropertyWaiting = true; } outId = mCurrentPropertyId; outDataType = mCurrentPropertyType; if (id == mCurrentPropertyId) { mIsPropertyWaiting = false; return 0; } else if (id < mCurrentPropertyId) { return -1; } mIsPropertyWaiting = false; return 1; }
void SkipPropertyHelper(SirenDataType type) { switch (type) { case SirenDataType.Bool: Stream.SkipBytes(sizeof(byte)); break; case SirenDataType.Int8: case SirenDataType.UInt8: Stream.SkipBytes(sizeof(byte)); break; case SirenDataType.Int16: case SirenDataType.UInt16: Stream.ReadVarUInt16(); break; case SirenDataType.Int32: case SirenDataType.UInt32: Stream.ReadVarUInt32(); break; case SirenDataType.Int64: case SirenDataType.UInt64: Stream.ReadVarUInt64(); break; case SirenDataType.Float: Stream.SkipBytes(sizeof(float)); break; case SirenDataType.Double: Stream.SkipBytes(sizeof(double)); break; case SirenDataType.String: { uint length= Stream.ReadVarUInt32(); Stream.SkipBytes((int)length); } break; case SirenDataType.Blob: { uint length= Stream.ReadVarUInt32(); Stream.SkipBytes((int)length); } break; case SirenDataType.Struct: SkipProperty(); break; case SirenDataType.List: { SirenDataType valueType=(SirenDataType)Stream.ReadUInt8(); uint count= Stream.ReadVarUInt32(); for (int i = 0; i < count; i++) { SkipPropertyHelper(valueType); } } break; case SirenDataType.Dictionary: { SirenDataType keyType=(SirenDataType)Stream.ReadUInt8(); SirenDataType valueType=(SirenDataType)Stream.ReadUInt8(); uint count= Stream.ReadVarUInt32(); for (int i = 0; i < count; i++) { SkipPropertyHelper(keyType); SkipPropertyHelper(valueType); } } break; } }
public override void OnPropertySkip(SirenDataType dataType) { SkipPropertyHelper(dataType); }
public SirenProperty(ushort id, SirenDataType type) { Id = id; DataType = type; }
public abstract void OnDictionaryBegin(SirenDataType keyDataType, SirenDataType valueDataType, int count);
public override void OnListBegin(out SirenDataType dataType, out int count) { dataType = (SirenDataType)Stream.ReadUInt8(); count = (int)Stream.ReadVarUInt32(); }
public void SerializeBase(object obj, SirenClass sirenClass) { if (sirenClass.BaseSirenClass != null) { SerializeBase(obj, sirenClass.BaseSirenClass); } foreach (var sirenProperty in sirenClass.Properties) { if (sirenProperty.Attribute.Modifier == SirenPropertyModifier.Required) { if (!sirenProperty.HasValue(obj)) { Console.WriteLine("Forget to set {0}.{1}", sirenClass.Name, sirenProperty.Name); Writer.OnError(); return; } } else { if (!sirenProperty.HasValue(obj)) { //skip return; } } Writer.OnPropertyBegin(sirenProperty.Name, sirenProperty.Id, sirenProperty.DataType); switch (sirenProperty.FieldType) { case SirenPropertyFieldType.Value: Writer.OnValue(sirenProperty.Info.GetValue(obj)); break; case SirenPropertyFieldType.String: Writer.OnString(sirenProperty.Info.GetValue(obj) as string); break; case SirenPropertyFieldType.Blob: Writer.OnMemoryData(sirenProperty.Info.GetValue(obj) as byte[]); break; case SirenPropertyFieldType.List: { object items = sirenProperty.Info.GetValue(obj); var listType = sirenProperty.Type; int count = Convert.ToInt32(listType.GetProperty("Count").GetValue(items)); var itemType = sirenProperty.Type.GenericTypeArguments[0]; SirenDataType itemDataType = SirenFactory.GetDataType(itemType); Writer.OnListBegin(itemDataType, count); var itemsProperty = listType.GetProperty("Item"); for (int i = 0; i < count; i++) { object listItem = itemsProperty.GetValue(items, new object[] { i }); SerializeHelper(listItem, sirenProperty.ValueSirenClass); } Writer.OnListEnd(); } break; case SirenPropertyFieldType.Dictionary: { object items = sirenProperty.Info.GetValue(obj); var dictType = sirenProperty.Type; int count = Convert.ToInt32(dictType.GetProperty("Count").GetValue(items)); var keyType = sirenProperty.Type.GenericTypeArguments[0]; var valueType = sirenProperty.Type.GenericTypeArguments[1]; SirenDataType keyDataType = SirenFactory.GetDataType(keyType); SirenDataType valueDataType = SirenFactory.GetDataType(valueType); Writer.OnDictionaryBegin(keyDataType, valueDataType, count); foreach (var o in (items as IEnumerable)) { var itemKey = o.GetType().GetProperty("Key").GetValue(o, null); SerializeHelper(itemKey, sirenProperty.KeySirenClass); var itemValue = o.GetType().GetProperty("Value").GetValue(o, null); SerializeHelper(itemValue, sirenProperty.ValueSirenClass); } Writer.OnDictionaryEnd(); } break; case SirenPropertyFieldType.Pointer: case SirenPropertyFieldType.Struct: { object val = sirenProperty.Info.GetValue(obj); SerializeHelper(val, sirenProperty.ValueSirenClass); } break; } Writer.OnPropertyEnd(); } }
public override void OnListBegin(SirenDataType itemDataType, int count) { Stream.WriteUInt8((byte)itemDataType); Stream.WriteVarUInt32((uint)count); }
public override void OnListBegin(out SirenDataType dataType,out int count) { dataType = (SirenDataType)Stream.ReadUInt8(); count = (int)Stream.ReadVarUInt32(); }
public override void OnListBegin(SirenDataType itemDataType, int count) { mWriter.WriteStartArray(); }
public override void OnDictionaryBegin(SirenDataType keyDataType, SirenDataType valueDataType, int count) { mWriter.WriteStartArray(); }
void SkipPropertyHelper(SirenDataType type) { switch (type) { case SirenDataType.Bool: Stream.SkipBytes(sizeof(byte)); break; case SirenDataType.Int8: case SirenDataType.UInt8: Stream.SkipBytes(sizeof(byte)); break; case SirenDataType.Int16: case SirenDataType.UInt16: Stream.ReadVarUInt16(); break; case SirenDataType.Int32: case SirenDataType.UInt32: Stream.ReadVarUInt32(); break; case SirenDataType.Int64: case SirenDataType.UInt64: Stream.ReadVarUInt64(); break; case SirenDataType.Float: Stream.SkipBytes(sizeof(float)); break; case SirenDataType.Double: Stream.SkipBytes(sizeof(double)); break; case SirenDataType.String: { uint length = Stream.ReadVarUInt32(); Stream.SkipBytes((int)length); } break; case SirenDataType.Blob: { uint length = Stream.ReadVarUInt32(); Stream.SkipBytes((int)length); } break; case SirenDataType.Struct: SkipProperty(); break; case SirenDataType.List: { SirenDataType valueType = (SirenDataType)Stream.ReadUInt8(); uint count = Stream.ReadVarUInt32(); for (int i = 0; i < count; i++) { SkipPropertyHelper(valueType); } } break; case SirenDataType.Dictionary: { SirenDataType keyType = (SirenDataType)Stream.ReadUInt8(); SirenDataType valueType = (SirenDataType)Stream.ReadUInt8(); uint count = Stream.ReadVarUInt32(); for (int i = 0; i < count; i++) { SkipPropertyHelper(keyType); SkipPropertyHelper(valueType); } } break; } }
public override void OnPropertyBegin(string name, ushort id, SirenDataType dataType) { mWriter.WritePropertyName(name); }
public abstract void OnListBegin(out SirenDataType dataType, out int count);
public abstract int OnPropertyBegin(string name, ushort id, SirenDataType dataType, out ushort outId, out SirenDataType outDataType);
public abstract void OnListBegin(SirenDataType itemDataType, int count);
public abstract void OnPropertySkip(SirenDataType dataType);
public abstract void OnPropertyBegin(string name, ushort id, SirenDataType dataType);
public override void OnPropertySkip(SirenDataType dataType) { mJsonTokens.Pop(); }