internal void InvokeWriter(XmlMapping mapping, XmlWriter xmlWriter, object o, XmlSerializerNamespaces namespaces, string encodingStyle, string id) {
XmlSerializationWriter writer = null;
try {
encodingStyle = ValidateEncodingStyle(encodingStyle, mapping.Key);
writer = Contract.Writer;
writer.Init(xmlWriter, namespaces, encodingStyle, id, this);
if (methods[mapping.Key].writeMethod == null) {
if (writerMethods == null) {
writerMethods = Contract.WriteMethods;
}
string methodName = (string)writerMethods[mapping.Key];
if (methodName == null) {
throw new InvalidOperationException(Res.GetString(Res.XmlNotSerializable, mapping.Accessor.Name));
}
methods[mapping.Key].writeMethod = GetMethodFromType(writer.GetType(), methodName, pregeneratedAssmbly ? assembly : null);
}
methods[mapping.Key].writeMethod.Invoke(writer, new object[] { o });
}
catch (SecurityException e) {
throw new InvalidOperationException(Res.GetString(Res.XmlNoPartialTrust), e);
}
finally {
if (writer != null)
writer.Dispose();
}
}