4

对于一个项目,我在 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))、Custom Type Serializer (JavaScriptSerializer.RegisterConverters()),但它们要么不起作用,要么必须返回一个“复杂”的 json 对象。

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

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

4

1 回答 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();
   }
}
于 2011-02-24T15:30:16.777 回答