I can't comment on the C# specifics, but when dealing with protobuf changes, one should never reuse the ordinal numbers of deleted fields. If you don't need a field anymore, you should
reserve the field number. You can find some documentation on this
over here.
A better approach here for your version 2 would be:
message A {
reserved 2;
string field1 = 1;
map<string, int> field3 = 3;
}
This will avoid problems with coding/decoding the message, which I suspect you are experiencing here.
Hope that helps,
Terry