【问题标题】:SQL XML or JSON to return to Objective-C via ASP.NETSQL XML 或 JSON 通过 ASP.NET 返回到 Objective-C
【发布时间】:2016-08-22 14:30:21
【问题描述】:

我有一个关于通过 ASP.NET 从 SQL 数据库获取数据然后将数据传递给 Objective-C 的问题。目前我只是使用 SQL 选择语句通过 ASP.NET 从数据库中获取数据,而 ASP.NET 返回的数据如下:

<ArrayOfKeyValueOfstringPunchListCellModel84zsBx89 xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<KeyValueOfstringPunchListCellModel84zsBx89>
<Key>ORC0023</Key>
<Value xmlns:d3p1="http://schemas.datacontract.org/2004/07/LHS.Models">
</Value>
</KeyValueOfstringPunchListCellModel84zsBx89>
</ArrayOfKeyValueOfstringPunchListCellModel84zsBx89>

然后在 Objective-C 中,我将数据放入 NSDictionary 中,如下所示:

NSDictionary *punchList = [[NSDictionary alloc]initWithDictionary:[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&myError]];

这里一切正常。

我现在正在做的是创建一个返回 XML 并让 ASP.NET 返回 XML 的存储过程(这里的一切都已完成并按预期工作)XML 如下所示:

<KeyValueOfstringPunchListCellModel84zsBx89>
<Key>ORC0023</Key>
<Value>
</Value>
</KeyValueOfstringPunchListCellModel84zsBx89>
</ArrayOfKeyValueOfstringPunchListCellModel84zsBx89>

现在对于各位 Objective-C 粉丝来说,您知道除非您使用第三方项目/库,否则您不能在 NSDictionary 中包含 XML。

现在我的问题是我是否需要重做我的存储过程以返回 JSON 或者还有其他方法可以解决这个问题?

我的最终目标是尽可能快地处理这个过程,并且 SQL 查询很大并且返回很多行。

【问题讨论】:

  • 你并没有真正解释你的问题是什么。 XML 和 JSON 的大小比较?您是否对 HTTP 响应启用了压缩?
  • 为什么需要手动准备 XML 或 JSON? ASP.Net API 可以按照我们定义的方式自动执行返回响应的过程

标签: sql asp.net objective-c json xml


【解决方案1】:

你应该

1) 重做您的存储过程并返回原始数据。

2) 让 asp.net 处理数据格式,因为一些客户端可能需要 JSON,而另一些客户端更喜欢 xml。所以如果你要走 JSON 路线,你可以从 MVC 控制器返回 JSON 结果,即

  public JsonResult GetData()
        {
            var temp = new {
                name = "hello world" 
            };
            return this.Json(temp)
        }

或者使用 web api 创建一个 web 服务。

因为你有一个大的结果集,你应该尝试使用 JSON,它比 xml 更简洁,因此会消耗更少的资源

【讨论】:

  • 这绝对是要走的路......如果它不是一些 basackward 版本的 asp.net。
【解决方案2】:

我想提供一个替代解决方案,但我必须做一些假设。

现在我的问题是我是否需要重做我的存储过程来返回 JSON 或者还有其他方法可以解决这个问题?

如果您可以避免该额外步骤,则不必返回 JSON,除非您运行的是 Microsoft SQL Server 2016,它现在支持开箱即用的“FOR JSON”子句。

我的最终目标是尽可能快地处理 SQL 查询 很大并且返回很多行。

这里“巨大”+“快速”可以发挥作用。在任何一种情况下,您也可以像 C# 粉丝一样,直接从 Objective-C 解析 XML,ala XmlReader。

当然有 thin 包装器,例如 IGXMLReader。这是针对您的 XML 的初步示例。

- (NSDictionary *)retrieveDataFromXml:(NSString *)xml {
  NSMutableDictionary *dictionary =
      [[NSMutableDictionary alloc] initWithCapacity:200];
  NSString *key;
  for (IGXMLReader *node in [[IGXMLReader alloc] initWithXMLString:xml]) {
    if ([node type] == IGXMLReaderNodeTypeElement &&
        [[node name] hasPrefix:@"Key"]) {
      key = [node text];
    } else if ([node type] == IGXMLReaderNodeTypeElement &&
               [[node name] hasPrefix:@"Value"] && [key length]) {
      [dictionary setObject:[node text] forKey:key];
      key = nil;
    }
  }
  return [dictionary copy];
}

我在github 中放了一个例子来说明这个概念。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    相关资源
    最近更新 更多