【问题标题】:JavaScriptSerializer and ValueTypes (struct)JavaScriptSerializer 和 ValueTypes (struct)
【发布时间】:2011-07-02 19:09:26
【问题描述】:

对于一个项目,我在 C# 中创建了几个结构。 probject 本身是一个 ASP.Net MVC 2 项目。

截图:

struct TDummy
{
    private char _value;

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

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

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

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

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

{"Value":{}}

我希望得到结果

{"Value":"X"}

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

{"Value":{"Name":"Value"}}

对此有什么想法吗?
我想将值类型序列化为值...

【问题讨论】:

    标签: c# serialization struct javascriptserializer value-type


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-12-13
      • 2011-08-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-14
      • 1970-01-01
      • 2017-08-08
      • 2011-03-13
      • 1970-01-01
      相关资源
      最近更新 更多