Here's some code that may help at least get you started. It was written against the Family Editor API, but I would imagine it would be very similar in the Project Editor API:
Build up the data, and store it into a new parameter we'll create:
// Set up data to store into a parameter
System.Collections.Generic.List values;
values = new System.Collections.Generic.List();
values.Add("Value1");
values.Add("Value2");
// Convert the data to a string
System.Xml.Serialization.XmlSerializer XMLSerializer;
XMLSerializer = new System.Xml.Serialization.XmlSerializer(typeof(System.Collections.Generic.List));
System.IO.StringWriter stringWriter = new System.IO.StringWriter();
XMLSerializer.Serialize(stringWriter, values);
string sParamValue = stringWriter.ToString();
FamilyParameter oFamParam;
bool bIsInstance = true;
// The INVALID group will have the new family parameter created in the "Other" group.
oFamParam = commandData.Application.ActiveDocument.FamilyManager.AddParameter("New Parameter",
BuiltInParameterGroup.INVALID,
ParameterType.Text,
bIsInstance);
// Store the XML-serialized string value into the parameter we just created
commandData.Application.ActiveDocument.FamilyManager.Set(oFamParam, sParamValue);
Now get the data back out and put it into the collection again so we can use it as normal:
// Get the string value back and put the data into our data structure
XMLSerializer = new System.Xml.Serialization.XmlSerializer(typeof(System.Collections.Generic.List));
oFamParam = commandData.Application.ActiveDocument.FamilyManager.get_Parameter("New Parameter");
sParamValue = commandData.Application.ActiveDocument.FamilyManager.CurrentType.AsString(oFamParam);
System.IO.StringReader stringReader = new System.IO.StringReader(sParamValue);
values = (System.Collections.Generic.List)XMLSerializer.Deserialize(stringReader);
Best of luck,