4

プロジェクトでは、C# でいくつかの構造体を作成しました。プロジェクト自体は ASP.Net MVC 2 プロジェクトです。

をちょきちょきと切る:

struct TDummy
{
    private char _value;

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

これを作成したのは、char 変数を特定の数の値に制限する必要があったためです。(列挙型を作成することもできましたが、これらの値はデータベースでも使用されるため、変換する必要があります)

今、私は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 に答える