I didn't know C# uses 4-byte integers. Presumably if you are sending stuff to the Arduino you are only sending numbers that fit in a 2-byte integer so the two high bytes will be 0 - but what about the sign bit?
I think the simplest thing is to read the C# integer into a long on the Arduino and then convert the long to an int.
YOU are the person who has to agree on endianness.
Serial.parseInt() converts characters to their numeric equivalent. It doesn't work with bytes that are already parts of an integer.
Why do you have int i = Serial.read(); //read the byte into int data type rather than the more obvious byte i = Serial.read(); //read the byte into int data type?
...R