JavaScriptSerializer 和 ValueTypes (struct)
Posted
技术标签:
【中文标题】JavaScriptSerializer 和 ValueTypes (struct)【英文标题】:JavaScriptSerializer and 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"
对此有什么想法吗? 我想将值类型序列化为值...
【问题讨论】:
【参考方案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();
【讨论】:
以上是关于JavaScriptSerializer 和 ValueTypes (struct)的主要内容,如果未能解决你的问题,请参考以下文章
JavaScriptSerializer 和 ValueTypes (struct)
使用 LINQ/JavaScriptSerializer 创建 JSON 对象而不是数组
JavaScriptSerializer类 对象序列化为JSON,JSON反序列化为对象
C#中用JavaScriptSerializer和Json.Net操作json格式的文件