如何在objective-C中反序列化对象
我试图使wcf方法工作时出错。其中一个参数是NSMutableArray,对象类型是TypeClass。我用NSMutableArray检查了一切,一切都很好 我的参数代码是:如何在objective-C中反序列化对象,objective-c,wcf,nsmutablearray,generic-list,Objective C,Wcf,Nsmutablearray,Generic List,我试图使wcf方法工作时出错。其中一个参数是NSMutableArray,对象类型是TypeClass。我用NSMutableArray检查了一切,一切都很好 我的参数代码是: NSData *myPostData = [[NSString stringWithFormat:@"{\"parameter1\":\"%@\"}",mynsmutablearraylist] dataUsingEncoding:NSUTF8StringEncoding]; NSMutableData *myMutab
NSData *myPostData = [[NSString stringWithFormat:@"{\"parameter1\":\"%@\"}",mynsmutablearraylist] dataUsingEncoding:NSUTF8StringEncoding];
NSMutableData *myMutablePostData = [NSMutableData dataWithData:myPostData];
wcf中的参数类型类似于List> >....
> > <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>
> > ...
>>。。。。
>>面值
>>
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > ...
根据原始问题的@“{\”参数1\:\“%@”}”
格式字符串,我假设您正在尝试构建JSON请求。但这可能不是创建JSON请求的最佳方式,所以我的原始答案(如下)集中于如何正确构建JSON请求
但退一步说,至少有三种不同类型的通用web服务接口:
- JSON,我(可能错误地)根据您的原始问题推断出您想要它,因此我的原始答案如下
- XML,您修改后的问题表明您可能希望将其用于SOAP请求;或
- 一些标准HTTP请求(例如
或其他常见变体)应用程序/x-www-form-urlencoded
NSMutableArray
参数使用stringWithFormat
、使用%@
无疑是不正确的
因此,问题恰恰是请求需要什么格式。如您修改后的问题所示,如果您需要创建SOAP请求,您需要手动构建该请求,自己添加XML标记,或者必须使用一些库。如果您正在为Mac OS X执行此操作,请参阅。如果你是为iOS做的,你必须找到一个第三方库。也许这个堆栈溢出问题是一个很好的起点:。或者在堆栈溢出中搜索“[ios]soap请求
”,您将获得大量其他点击
就我个人而言,当从iOS应用程序测试SOAP服务时,我已经手动构建了请求,但它既笨拙又笨拙。如果您的web服务提供JSON接口,那么这可能是一个更好的选择,因为这是一个具有更大iOS支持的接口
无论如何,下面是我的原始答案,展示了如何为JSON请求构建POST主体
原始答复: 如果没有关于请求完整格式的更多细节,我们不可能得到更具体的信息,但是如果您只是尝试创建一个JSON请求,您将使用
NSJSONSerialization
,而不是stringWithFormat
,创建该NSData
,例如,可能会执行以下操作:
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
以及您对“对象和键”的引用)。但是我假设这是一个数组字典,在这种情况下,上面的语法仍然有效。但是,同样,如果不确切知道您的服务需要什么,很难说
我也不明白你为什么要创建NSMutableData
格式副本,但是如果你想给这个JSON添加更多的参数,你真的应该先将这些参数添加到原始的字典中,然后在你完全构建了你想要的JSON格式的字典/数组结构之后使用NSJSONSerialization
。例如:
NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
[dictionary setObject:mynsmutablearraylist forKey:@"parameter1"];
[dictionary setObject:someOtherObject forKey:@"parameter2"];
// ... repeat for all of the objects in the dictionary
NSError *error = nil;
NSData *postData = [NSJSONSerialization dataWithJSONObject:dictionary options:0 error:&error];
NSAssert(postData, @"%s: dataWithJSONObject error: %@", __FUNCTION__, error);
您知道预期数据的格式和实际发送的内容吗?它将返回一个NSString类型的单词。是的,我知道。我用debug检查了很多数据。@user3065761:他没有说数据的类型,他说的是格式。通过执行
[NSString stringWithFormat:@“%@”,someNSMutableArray]
,您可以使用默认的NSArray字符串格式,而不是WCF所期望的格式。例如,NSArray可能会给出一个类似于(苹果、香蕉、有机柠檬)的字符串,而WCF可能需要一个类似于[“苹果”、“香蕉”、“有机柠檬”]
的数组。(我实际上不知道WCF想要什么,但您肯定可以看到有多种方式来格式化列表。)通过您的示例,我对此一无所知:/我在问题中添加了一些信息以帮助您理解。@user3065761我发现下面的语句不清楚:“当我使用完全相同的值测试参数时。”你在Objective-C代码中这么做了?如果是这样,也许您可以向我们展示创建此正确格式请求的代码。现在,我们真的很难推断请求必须采用什么格式,而您的澄清只会让它更加混乱(至少对我来说),因为我不确定如何将您最初的问题(似乎试图创建一个JSON请求)与您修改后的问题中的后续SOAP示例相协调