gpt4 book ai didi

c# - JavaScriptSerializer 和 ValueTypes(结构)

转载 作者:行者123 更新时间:2023-11-30 13:05:24 27 4
gpt4 key购买 nike

对于一个项目,我在 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"}}

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

最佳答案

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

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

关于c# - JavaScriptSerializer 和 ValueTypes(结构),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5092031/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com