当我使用DataContractJsonSerializer序列化枚举值时,它序列化枚举的数值,而不是字符串名称.
IE:
enum foo
{
bar,
baz
}
Run Code Online (Sandbox Code Playgroud)
序列化foo.bar的值将返回"0",而不是"bar".
相反,我更喜欢它,有没有办法覆盖它?
编辑:
因为我不想更改序列化程序,所以我使用了一个简单的解决方法.
我在类中公开了一个属性来序列化,调用ToString值,即:
// Old
[DataMember]
public EnumType Foo
{
get { return _foo; }
set { _foo = value; }
}
// New, I still kept the EnumType but I only serialize the string version
public EnumType Foo
{
get { return _foo; }
set { _foo = value; }
}
[DataMember]
public string FooType
{
get { return _foo.ToString(); }
private set {}
}
Run Code Online (Sandbox Code Playgroud) 我的类有一个属性'PropertyA',我希望它在序列化时在JSON对象中显示为'PropertyB'.我可以使用任何类型的属性吗?
是否有一个等效的属性可以放在.NET类中的对象属性上,它将执行等效的XmlElement或XmlAttribute?
[XmlRoot("objects")]
public class MyObjects: List<MyObject> { }
[XmlRoot("object")]
public class MyObject {
[XmlAttribute("name")]
public string Name { get; set; }
[XmlAttribute("title")]
public string Title { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这将返回类似于以下内容的XML:
<objects>
<object name="David" title="Engineer" />
<object name="William" title="Developer" />
</objects>
Run Code Online (Sandbox Code Playgroud)
我想拥有JavaScriptSerializer,由Controller类中的ASP.NET MVC框架'Json'方法使用:
public ActionResult Search() {
// code to populate data object
return Json(data);
}
Run Code Online (Sandbox Code Playgroud)
返回相同的格式化结果,如下所示:
[{"name":"David","title":"Engineer"},{"name":"William","title":"Developer"}]
Run Code Online (Sandbox Code Playgroud)
目前,使用Json方法输出对象,返回:
[{"Name":"David"}, "Title":"Engineer"}, {"Name":"William", "Title":"Developer"}]
Run Code Online (Sandbox Code Playgroud)
现在,我意识到这个例子是超级简化的,我在这里做的唯一事情就是改变属性名称的大小,但在更高级的场景中,我可以将属性名称重新映射到其他东西......
System.Web.Script.Serialization包含一个ScriptIgnoreAttribute属性,但这只是告诉JavaScriptSerializer在序列化时忽略该属性,但似乎没有任何东西可以改变实际输出的名称或格式呢?
我正在使用JavaScriptSerializer来反序列化json数据.一切都很好,但我的问题是,json数据中的一个属性被命名为'base',所以我不能在我的C#代码中创建这样的属性.我发现我可以手动将值映射到构造函数中的属性,但问题是,我的DTO有200个属性,所以我不想手动创建它,而是希望找到任何其他解决方案.我也尝试使用注释,但是这个:
[JsonProperty("base")]
public int baseValue { get; set; }
Run Code Online (Sandbox Code Playgroud)
没有帮助我,值baseValue每次设置为0(如果你认为,这个注释应该工作,我可以发布我的整个代码,不仅这2行)
有什么办法可以简单地解决我的问题吗?
我正在使用C#进行弹性搜索,我希望使用C#序列化为JSON的匿名类型创建查询.但是我遇到了一个问题,因为我需要在一个部分中看起来像这样的JSON:
{"bool": {<unimportant for question>}}
Run Code Online (Sandbox Code Playgroud)
这将转换为具有名为bool的字段的ac#类.这可能吗?(我猜不是......)
我想我需要自定义序列化,或者弹性搜索为bool提供了一些其他的替代名称.
我有一个返回的JSON
{
"access_token": "",
//....
}
Run Code Online (Sandbox Code Playgroud)
我想把它映射到AccessToken而不是access_token.
使用JSON.NET,可以编写
[JsonProperty("access_token")]
public string AccessToken{ get; set; }
Run Code Online (Sandbox Code Playgroud)
ASP.NET框架中是否存在等价物?我不想要JSON.NET依赖.