Как получить члены динамически типизированного массива в C #? - PullRequest
0 голосов
/ 11 ноября 2010

Я динамически вызываю веб-службы в своей программе, используя класс 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, который я только начал изучать. Я продолжаю слышать «отражение», но примеры, которые я прочитал, похоже, не относятся к этому вопросу.

Если этот вопрос сбивает с толку, это потому, что я очень запутался.

Ответы [ 2 ]

1 голос
/ 11 ноября 2010

Попробуйте привести его к IEnumerable

var list = result as IEnumerable;
if(list != null) 
{
   foreach (var i in list)
   {
       // Do stuff
   }
}
1 голос
/ 11 ноября 2010

Попробуйте привести его к IEnumerable.

var goodResult = result as IEnumerable;

if (goodResult != null) // use it
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...