0

我编写了一个名为 EncryptedValue 的类。我已经定义了运算符和 ToString 以允许在代码中将其用作常规值(int、double、DateTime)。我想要做的是为这个对象分配一个值,并将它包含在我发送回我的页面的 JSON 中。

这是我的课:

public class EncryptedValue<T> {
  public T Value { get; }
  public string Encryted { get; }
  /* Implementation Details */
}

这是我的行动:

public JsonResult MyAction() {
 EncryptedValue value = 5;
 return Json(new { EncryptedValue: value });
}

这是我要生成的 JSON:

{ "EncryptedValue":"TheEncryptedString" }

但相反,产生的是:

{ "EncryptedValue":{"Encrypted":"TheEncryptedString","Value":2}}

即使我没有在类上放置任何属性,JSON 看起来像:

{ "EncryptedValue":{} }

有谁知道如何让 JavaScriptSerializer 认为一个类是单个值并在其上调用 ToString() ?

更新

我想我需要澄清这是一个简化的例子。我有将使用此类的复杂类型:

public class User {
  public EncryptedValue UserId { get; set }
  public string UserName { get; set }
}

我将写出一个用户列表:

IList<User> users = GetUsers();
return Json(users);
4

3 回答 3

0

您可以使用 linq 创建仅包含所需数据的匿名类型(或仅在没有 linq 的情况下创建它)。

编辑:

这不能完成你所追求的吗?

        IList<User> userList = GetUsers();

        var users = from user in userList
                    select new
                            {
                                EncryptedValue = user.UserId.Encryted
                            };

        return Json(users);
于 2011-08-17T18:13:06.427 回答
0

我能想到的最简单的方法对你来说是可重用的,就是在你的控制器上提供一个自定义方法:

 protected ActionResult Encrypted<T>(T inputElement)
 {
     Encrypted<T> instance = new Encrypted<T> { Value = inputElement };

     return Json(new { Encrypted = instance.Encrypted });
 }

然后你只需从你的控制器调用它:

public ActionResult Sample()
{
     return Encrypted(10);
}
于 2011-08-17T18:13:56.417 回答
0

这是否有效:

return Json(new { EncryptedValue: value.Encrypted} );
于 2011-08-17T18:14:47.570 回答