【问题标题】:JSON.NET Property as Javascript FunctionJSON.NET 属性作为 Javascript 函数
【发布时间】:2015-01-03 16:49:18
【问题描述】:

我有一个这样的 C# 类

public class Person
{
  string firstname {get; set;}
  string lastname {get; set;}
  string onRenderFunction {get; set;}
}

然后我这样设置类:

var superman = new Person
{ 
    firstname = "Clark",
    lastname = "Kent",
    onRenderFunction = "renderPersonComplete"
}

我想要的是将“onRenderFunction”序列化为方法而不是字符串。像这样;

{ 
  "firstname": "Clark",
  "lastname": "Kent",
  "onRenderFunction": renderPersonComplete
}

因此,当通过 Ajax 调用返回序列化对象并将其提供给能够调用函数“onRenderFunction”的插件时,插件将看到该函数已设置并调用如下函数设置:

var renderPersonComplete = function() {
   alert('do something on render complete');
};

我将如何设置 JSON.NET 来序列化 Person 类来做到这一点?

【问题讨论】:

  • "onRenderFunction" 被序列化为方法是什么意思?你想在 C# 中将 JavaScript 函数分配给字符串属性吗?
  • 为函数添加了更多细节。我通过对 jQuery 插件的 Ajax 调用将序列化对象作为 Javascript 对象传递。插件查看 javascript 对象上的 onRenderFunction 属性是否为函数,如果是则调用它。
  • 从ajax获取数据后为什么不直接将函数添加到JS对象中?
  • 要序列化的对象是设置服务器端,回调随业务逻辑而变化。我需要能够设置给插件的整个对象。
  • 方法是使用javascript eval。可以这样做 eval(yourjsonobject.onRenderFunction)

标签: javascript c# serialization json.net


【解决方案1】:

您必须进行一些额外的处理才能将函数分配给属性,因为根据定义,JSON 只是基元的键值对,它不知道函数。

所以最初来自 ajax 的数据将如下所示:

var data = { 
  "firstname": "Clark",
  "lastname": "Kent",
  "onRenderFunction": "renderPersonComplete"
}

假设您在window 的范围内有一个名为renderPersonComplete 的函数:

window.renderPersonComplete = function() {
   alert('do something on render complete');
};

现在您必须修改数据以分配功能:

data.onRenderFunction = window[data.onRenderFunction] // This assigns the function to onRenderFunction  property.

函数的名称由服务器端根据你的逻辑决定。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多