Я динамически вызываю веб-службы в своей программе, используя класс WSProxy здесь , и мне нужно проанализировать возвращенный объект в XML или, по крайней мере, получить доступ к членам внутри возвращенного результата веб-службы.
Например, если я получу массив кодов состояний, мне нужно сделать:
public object RunService(string webServiceAsmxUrl, string serviceName, string methodName, string jsonArgs)
{
WSDLRuntime.WsProxy wsp = new WSDLRuntime.WsProxy();
// Convert JSON to C# object.
JavaScriptSerializer jser = new JavaScriptSerializer();
var dict = jser.Deserialize<Dictionary<string,object>>(jsonArgs);
// uses mi.Invoke() from the WSProxy class, returns an object.
var result = wsp.CallWebService(webServiceAsmxUrl, serviceName, methodName, dict);
Я пробовал разные методы, чтобы добраться до членов массива, но я зашел в тупик.
// THIS WON'T WORK.
// "Cannot apply indexing with [] to an expression of type 'object'"
var firstResult = result[0];
// THIS WON'T WORK.
// "foreach statement cannot operate on variables of type 'object' because 'object' does not contain a public definition for 'GetEnumerator'"
foreach (var i in result)
{
}
return object
//At the end of the class, if I try to return the object for XML parsing, I'll get this:
//System.InvalidOperationException: There was an error generating the XML document. ---> System.InvalidOperationException: The type StateCodes[] may not be used in this context.
//at System.Xml.Serialization.XmlSerializationWriter.WriteTypedPrimitive(String name, String ns, Object o, Boolean xsiType)
Поскольку я не буду знать тип массива, который возвращается заранее, я не могу выполнить раннее связывание. Я использую C # 3.5, который я только начал изучать. Я продолжаю слышать «отражение», но примеры, которые я прочитал, похоже, не относятся к этому вопросу.
Если этот вопрос сбивает с толку, это потому, что я очень запутался.