JavaScriptSerializer和ValueTypes(结构体)

4

我创建了几个C#结构体用于一个项目。这个项目本身是一个ASP.Net MVC 2项目。

以下是部分内容:

struct TDummy
{
    private char _value;

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

我创建这个程序是因为我需要将一个字符变量限制在特定数量的值中。(我本可以创建一个枚举类型,但是这些值也被用于数据库中,那么我还需要进行转换)

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

return Json(new { Value = new TDummy('X') });

但是当我这样做时,我得到的结果是:
{"Value":{}}

我希望您能得到一个结果:
{"Value":"X"}

我尝试了几种方法,比如TypeConverter(CanConvertTo(string))和自定义类型序列化器(JavaScriptSerializer.RegisterConverters()),但是它们要么不起作用,要么必须返回一个“复杂”的JSON对象。
{"Value":{"Name":"Value"}}

有什么想法吗? 我想将值类型序列化为值...
1个回答

0

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

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();
   }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接