我正在使用 Windows 平台上的 protobuf-net v3.0.101 并在使用 grpc protobuf-net 对其进行序列化时获取以下字符串数组中的空值异常:
我已经这样定义了我的 DataContract:
[DataContract]
public class StringArray
{
[DataMember(Order = 1)]
public string[] StrArray;
}
这是我尝试序列化的实际消息:
var stringArray = new StringArray() { StrArray = new string[] { "1", "2", null, "3" } };
而且,这就是我调用 Serializer 的方式:
method.RequestMarshaller.ContextualSerializer(request, transmitPayload);
这是一个例外:
FAIL: Error: Unhandled exception in required test method. An element of type System.String was null; this might be as contents in a list/array. (System.NullReferenceException: An element of type System.String was null; this might be as contents in a list/array
at ProtoBuf.Internal.ThrowHelper.ThrowNullRepeatedContents[T]()
at ProtoBuf.Serializers.RepeatedSerializer`2.Write[TEnumerator](State& state, Int32 fieldNumber, SerializerFeatures category, WireType wireType, TEnumerator& values, ISerializer`1 serializer)
at ProtoBuf.Serializers.VectorSerializer`1.Write(State& state, Int32 fieldNumber, SerializerFeatures category, WireType wireType, T[] values, ISerializer`1 serializer)
at ProtoBuf.Serializers.RepeatedSerializer`2.WriteRepeated(State& state, Int32 fieldNumber, SerializerFeatures features, TCollection values, ISerializer`1 serializer)
at proto_29(State& , StringArray )
at ProtoBuf.ProtoWriter.State.SerializeRoot[T](T value, ISerializer`1 serializer)
at ProtoBuf.MeasureState`1..ctor(TypeModel model, T& value, Object userState, Int64 abortAfter)
at ProtoBuf.Meta.TypeModel.Measure[T](T value, Object userState, Int64 abortAfter)
at ProtoBuf.Meta.TypeModel.ProtoBuf.IMeasuredProtoOutput<System.Buffers.IBufferWriter<System.Byte>>.Measure[T](T value, Object userState)
at ProtoBuf.Grpc.Configuration.ProtoBufMarshallerFactory.ContextualSerialize[T](T value, SerializationContext context)