msgpack / msgpack-cli

MessagePack implementation for Common Language Infrastructure / msgpack.org[C#]
http://msgpack.org
Apache License 2.0
835 stars 175 forks source link

Read object for fixext broken by design #269

Open stalkerg opened 7 years ago

stalkerg commented 7 years ago

Hello. Currently, I try to read fixext like a MessagePackObject, but it's not possible.

  1. fixext read as Binary (MessagePackObject<byte[]>) instead MessagePackObject\<MessagePackExtendedTypeObject>. Some extra proves I found here https://github.com/msgpack/msgpack-cli/wiki/New-message-pack-spec .
  2. I can't convert to Bytes[] by AsBinary because you check string here:
    An exception of type 'System.ArgumentException' occurred in MsgPack.dll but was not handled in user code: 'Do not convert System.Byte[] MessagePackObject to MsgPack.MessagePackString.'
    at MsgPack.MessagePackObject.VerifyUnderlyingType[T](MessagePackObject instance, String parameterName)

What should I do for reading objects from a stream and just check the object for fixext? (in my stream I also have other types)

yfakariya commented 7 years ago

Thank you for feedback.

  1. Why do you use it so? Could you tell me a your use case or scenario?
  2. It is bug for type check. The message should be like `Do not convert MsgPack.MessagePackExtendedTypeObject MessagePackObject to Byte[].'
stalkerg commented 7 years ago

Thanks for answers.

  1. I should implement custom serializer over "msgpack-cli" because I have already specific lib/service in another language.
  2. Ok, it's logical but how I can recognize that is current object MessagePackExtendedTypeObject?
yfakariya commented 7 years ago

You can use MessagePackObject.IsTypeOf<MessagePackExtendedTypeObject>(). Do you use this method to implement your custom serializer?

stalkerg commented 7 years ago

You can use MessagePackObject.IsTypeOf()

Ohh thanks! I just skip it because I expected what

MessagePackObject.UnderlyingType == typeof(MessagePackExtendedTypeObject)

should be same as

MessagePackObject.IsTypeOf<MessagePackExtendedTypeObject>()
stalkerg commented 7 years ago

I confirm IsTypeOf for MessagePackExtendedTypeObject is work correctly.