当我尝试使wcf方法工作时出错。其中一个参数是NSMutableArray,Object类型是TypeClass。我用NSMutableArray检查了一切,一切似乎都很好。
我的参数代码是:
NSData *myPostData = [[NSString stringWithFormat:@"{\"parameter1\":\"%@\"}",mynsmutablearraylist] dataUsingEncoding:NSUTF8StringEncoding];
NSMutableData *myMutablePostData = [NSMutableData dataWithData:myPostData];
wcf中的参数类型类似于List<类型类>
我可以看到mynsmutablearraylist的对象和键的值。但我不明白为什么它不起作用。
此wcf方法适用于Win8 metro应用程序,但我无法使其适用于IOS。
服务器在处理请求时遇到错误。该 异常消息是'格式化程序在尝试时抛出异常 反序列化消息:尝试时出错 反序列化参数http://tempuri.org/:typeclass。该 InnerException消息是'反序列化时出错 对象类型 System.Collections.Generic.List`1 [ServiceOfMine.Entities.TypeClass, ServiceOfMine,Version = 1.0.0.0,Culture = neutral, 公钥=空]。遇到无效字符' '&#39 ;.有关详细信息,请参阅InnerException。'。查看服务器日志 更多细节。异常堆栈跟踪是:
已添加信息
当我使用完全相同的值测试参数时,它工作正常。 SOAPUI中Request的部分:
> >....
> > <tem: parameter4>parvalue</tem: parameter4>
> > < tem: typeclass>
> > <!--Zero or more repetitions:-->
> > <ser:TypeClass>
> >
> > <ser:drugId></ser:drugId>
> > <ser:drugname></ser:drugname>
> > </ser:TypeClass>
> > <ser:TypeClass>
> >
> > <ser:drugId></ser:drugId>
> > <ser:drugname></ser:drugname>
> > </ser:TypeClass>
> > </ tem: typeclass>
> > ...
答案 0 :(得分:2)
根据原始问题的@"{\"parameter1\":\"%@\"}"
格式字符串,我假设您正在尝试构建JSON请求。但这可能不是创建JSON请求的最佳方式,因此我的原始答案(如下)侧重于如何正确构建JSON请求。
但要退一步,至少有三种不同类型的常见Web服务接口:
JSON,我(或许是错误的)根据您的原始问题推断出您想要的,因此我的原始答案如下;
XML,您修改过的问题表明您可能需要SOAP请求;或
某些标准HTTP请求(例如application/x-www-form-urlencoded
或其他常见变体)。
无论您尝试使用stringWithFormat
进行哪种操作,使用%@
NSMutableArray
参数无疑是错误的。
所以,问题恰恰是请求需要的格式。如果您在修改后的问题建议中需要创建SOAP请求,则需要手动构建,自己添加XML标记,或者必须使用某些库。如果您在Mac OS X上执行此操作,请参阅Web Services Core Programming Guide。如果您正在使用iOS,则必须找到第三方库。也许这个Stack Overflow问题是一个很好的起点:How to access SOAP services from iPhone。或者搜索Stack Overflow为“[ios] soap request
”,你会获得很多其他点击。
就个人而言,当从iOS应用程序测试SOAP服务时,我已经手动构建了请求,但它很笨拙和笨拙。如果您的Web服务提供了JSON接口,那么这可能是更好的选择,因为这是一个具有更大iOS支持的接口。
无论如何,我的原始答案,显示如何为JSON请求构建POST正文如下。
原始答案:
如果没有关于请求的完整格式的更多详细信息,我们就无法获得更具体的信息,但如果您只是尝试创建JSON请求,则可以使用{{1}创建NSData
},而不是NSJSONSerialization
,例如可能会做类似的事情:
stringWithFormat
您还可以参考“NSDictionary *dictionary = @{@"parameter1": mynsmutablearraylist,
@"parameter2": someOtherObject};
NSError *error = nil;
NSData *postData = [NSJSONSerialization dataWithJSONObject:dictionary options:0 error:&error];
NSAssert(postData, @"%s: dataWithJSONObject error: %@", __FUNCTION__, error);
”的“对象和键”,但我对名称感到困惑(这表示它是mynsmutablearraylist
并且您对“对象和键”的引用)。但我假设这是一个数组字典,在这种情况下上面的语法仍然有效。但是,如果不确切地知道您的服务正在寻找什么,就很难说。
我也不明白为什么你要创建NSMutableArray
再现,但是如果你试图为这个JSON添加更多参数,你真的应该先将它们添加到原始字典然后再使用{ {1}}一旦你以JSON格式完全构建了你想要的字典/数组结构。例如:
NSMutableData