That's because the JSON (de)serializer is looking for an array and is getting an object.
You can solve this in one of two ways; the first (and easiest) is to change the type of ScoreData to more appropriately reflect the incoming data:
[DataMember()]
public object ScoreData;
You can then use "as dynamic" when you need to read from it.
The other route would be to correct the JSON that is coming into the service. The corrected JSON would look like:
{"ProspectNo":"1000000073","MakerId":"C136771","MkrDate":"2015/11/26","TranID":null,"ScoreData":[{ "Key": "Client Experience", "Value": "1"},{ "Key": "Stability & Ownership", "Value" ,"7"},{"Key": "Property ownership", "Value": "22"},{"Key": "Co-app/Guarantor", "Value":"16"},{ "Key": "proposed cost", "Value":"1800000"}]}