【问题标题】:porting this php code to c#将此 php 代码移植到 c#
【发布时间】:2011-01-15 09:03:57
【问题描述】:

我无法将此代码移植到 c#。我的主要问题是 $fb_activity_array。

            $fb_activity_message = '{*actor*} played this game';
            $fb_activity_array = json_encode(array('message' => $fb_activity_message, 'action_link' => array('text' => 'Play Now','href' => 'http://yoururltoplaygamegere')));

【问题讨论】:

  • 到目前为止你有什么,可以帮助我们告诉你为什么它不起作用。
  • 也许你应该对你的问题更准确一点......
  • 我的问题是我不知道如何创建这样的数组。然后用 json 编码。

标签: c# php json arrays porting


【解决方案1】:

这可能是 Facebook 应用吗?您似乎正在尝试创建 Stream 帖子。如果是这样,我建议使用 .NET Facebook API,它包含执行您想要的操作的函数,以及一些 JSON 格式化实用程序(如果您需要手动执行某些操作)。

【讨论】:

  • 这是一个 Facebook 应用程序。但这不是一个流帖子。这是一个dashboard.publishActivity 帖子,它是facebook api 的新内容,尚未在我所知道的任何c# api 中实现。所以我修改了其中一个 c# 工具包 api,并让它与 dashboard.addNews 一起正常工作,没问题。但是这个 publishActivity 给我带来了问题。
  • 我发现 Facebook.Utility.JSONHelper 类对于此类烦人的情况很方便。您会考虑将您的代码作为补丁提交吗?我们实际上也在等待更新以涵盖新的 Dashboard API。 :)
【解决方案2】:

这不是一个完美的例子,但这可能会让您走上正确的道路。首先创建一个对象来保存您的数据。

public class activity
{
    public activity(string message, object action_link)
    {
        Message = message;
        Action_Link = action_link;
    }

    public string Message { get; set; }
    public object Action_Link { get; set; }

}

public class action_link
{
    public string Text { get; set; }
    public string Href { get; set; }

    public action_link(string text, string href)
    {
        Text = text;
        Href = href;
    }
}

然后你想创建一个这样的类来序列化它:

using System;
using System.Web;
using System.Web.Script.Serialzation;
     public class activityHandler : IHttpHandler
        {
        public void ProcessRequest (HttpContext context) {
                string message = "{*actor*} played this game";
                string text = "Play Now";
                string href = "http://yoururltoplaygamegere";

                action_link link = new action_link(text, href);
                activity act = new activity(message, link);

                JavaScriptSerializer serializer = new JavaScriptSerializer();
                context.Response.Write(serializer.Serialize(act));
                context.Response.ContentType = "application/json";

        }
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }

}

这很可能会为您提供序列化时正在寻找的 JSON 结构。如果符合您希望实现的标准,您可以将 action_link 对象转换为一个集合,以便每个活动对象可以有多个 action_link 对象,依此类推。您可以在此处了解有关此示例中使用的序列化的更多信息:

JSON Serialization in ASP.NET with C#

希望这会有所帮助。

【讨论】:

  • 你能告诉我如何以同样的方式创建数组吗?
  • 这可能会涉及一些非常复杂的代码,并且从您关于完全相同主题的其他帖子的外观看来,编码可能不是您的问题。您的问题似乎与获取 {actor} 值有关,我对此知之甚少。但我会更新我上面的代码给你一个提示。还可以使用我提供的链接,让我知道它是如何进行的。如果您需要进一步的帮助,我会看看我能做些什么。