StringSerializer.cs 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. #if !NO_RUNTIME
  2. using System;
  3. namespace ProtoBuf.Serializers
  4. {
  5. sealed class StringSerializer : IProtoSerializer
  6. {
  7. static readonly Type expectedType = typeof(string);
  8. public StringSerializer(ProtoBuf.Meta.TypeModel model)
  9. {
  10. }
  11. public Type ExpectedType => expectedType;
  12. public void Write(object value, ProtoWriter dest)
  13. {
  14. ProtoWriter.WriteString((string)value, dest);
  15. }
  16. bool IProtoSerializer.RequiresOldValue => false;
  17. bool IProtoSerializer.ReturnsValue => true;
  18. public object Read(object value, ProtoReader source)
  19. {
  20. Helpers.DebugAssert(value == null); // since replaces
  21. return source.ReadString();
  22. }
  23. #if FEAT_COMPILER
  24. void IProtoSerializer.EmitWrite(Compiler.CompilerContext ctx, Compiler.Local valueFrom)
  25. {
  26. ctx.EmitBasicWrite("WriteString", valueFrom);
  27. }
  28. void IProtoSerializer.EmitRead(Compiler.CompilerContext ctx, Compiler.Local valueFrom)
  29. {
  30. ctx.EmitBasicRead("ReadString", ExpectedType);
  31. }
  32. #endif
  33. }
  34. }
  35. #endif