首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScriptSerializer和ValueTypes (结构)

JavaScriptSerializer和ValueTypes (结构)
EN

Stack Overflow用户
提问于 2011-02-23 22:13:08
回答 1查看 695关注 0票数 4

对于一个项目,我用C#创建了几个结构。project本身就是一个ASP.Net MVC2项目。

截图:

代码语言:javascript
复制
struct TDummy
{
    private char _value;

    public TDummy(char value)
    {
         this._value = value; // Restrictions
    }
}

我之所以创建它,是因为我需要将char变量限制为特定数量的值。(我本可以创建一个Enum,但这些值也会在数据库中使用,然后我仍然需要转换它们)

现在我需要创建一个JsonResult,比如

代码语言:javascript
复制
return Json(new { Value = new TDummy('X') });

但是当我这样做的时候,我得到的结果是:

代码语言:javascript
复制
{"Value":{}}

我希望得到的结果是

代码语言:javascript
复制
{"Value":"X"}

我尝试过几种方法,比如TypeConverter (CanConvertTo(string))、自定义类型序列化(JavaScriptSerializer.RegisterConverters()),但它们要么不起作用,要么必须返回一个“复杂”的json对象。

代码语言:javascript
复制
{"Value":{"Name":"Value"}}

对此有什么想法吗?

我想将一个值类型序列化为一个值...

EN

回答 1

Stack Overflow用户

发布于 2011-02-24 23:30:17

如果有人感兴趣,我已经创建了一个小演示(控制台应用程序)来说明这一点:

代码语言:javascript
复制
public struct TState
{
   public static TState Active = new TState('A');
   public static TState Pending = new TState('P');

   private char _value;

   public TState(char value)
   {
      switch (value)
      {
         case 'A':
         case 'P':
            this._value = value;  // Known values
            break;
         default:
            this._value = 'A';    // Default value
            break;
      }
   }

   public static implicit operator TState(char value)
   {
      switch (value)
      {
         case 'A':
            return TState.Active;
         case 'P':
            return TState.Pending;
      }
      throw new InvalidCastException();
   }

   public static implicit operator char(TState value)
   {
      return value._value;
   }

   public override string ToString()
   {
      return this._value.ToString();
   }
}

public class Test { public TState Value { get; set; } }

class Program
{
   static void Main(string[] args)
   {
      Test o = new Test();
      o.Value = 'P';               // From Char
      char c = o.Value;            // To Char
      Console.WriteLine(o.Value);  // Writes 'P'
      Console.WriteLine(c);        // Writes 'P'

      JavaScriptSerializer jser = new JavaScriptSerializer();
      Console.WriteLine(jser.Serialize(o));  // Writes '{"Value":{}}'

      Console.ReadLine();
   }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5092031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档