使用JavaScriptSerializer进行序列化时,可以忽略该类的某些字段?有关JavaScriptSerializer的一些问题
使用JavaScriptSerializer进行序列化时,我们是否可以更改字段的名称? 例如,该字段是字符串is_OK,但我希望它被映射到isOK?
1
A
回答
6
对于最大的灵活性(因为你提到的名字一样),理想的是调用RegisterConverters
的JavaScriptSerializer
对象上,注册一个或更多JavaScriptConverter
实现(可能在数组或迭代器块中)。
然后,您可以实施Serialize
,通过向您返回的词典添加键/值对,在任何名称下添加(或不)和值。如果数据是双向的,你也需要匹配Deserialize
,但通常(对于Ajax服务器),这不是必需的。
完整的示例:
using System;
using System.Collections.Generic;
using System.Web.Script.Serialization;
class Foo
{
public string Name { get; set; }
public bool ImAHappyCamper { get; set; }
private class FooConverter : JavaScriptConverter
{
public override object Deserialize(System.Collections.Generic.IDictionary<string, object> dictionary, System.Type type, JavaScriptSerializer serializer)
{
throw new NotImplementedException();
}
public override System.Collections.Generic.IEnumerable<System.Type> SupportedTypes
{
get { yield return typeof(Foo); }
}
public override System.Collections.Generic.IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
var data = new Dictionary<string, object>();
Foo foo = (Foo)obj;
if (foo.ImAHappyCamper) data.Add("isOk", foo.ImAHappyCamper);
if(!string.IsNullOrEmpty(foo.Name)) data.Add("name", foo.Name);
return data;
}
}
private static JavaScriptSerializer serializer;
public static JavaScriptSerializer Serializer {
get {
if(serializer == null) {
var tmp = new JavaScriptSerializer();
tmp.RegisterConverters(new [] {new FooConverter()});
serializer = tmp;
}
return serializer;
}
}
}
static class Program {
static void Main()
{
var obj = new Foo { ImAHappyCamper = true, Name = "Fred" };
string s = Foo.Serializer.Serialize(obj);
}
}
12
您可以使用[ScriptIgnore]跳过一个属性:
using System;
using System.Web.Script.Serialization;
public class Group
{
// The JavaScriptSerializer ignores this field.
[ScriptIgnore]
public string Comment;
// The JavaScriptSerializer serializes this field.
public string GroupName;
}
相关问题
- 1. JavaScriptSerializer问题
- 2. 有关NHibernate的GuidCombGenerator的一些问题
- 3. 有关linux信号的一些问题
- 4. 有关TestComplete的一些问题
- 5. 有关pthread_mutex_lock的一些问题
- 6. 有关TeamCity的一些问题
- 7. 有关缓存的一些问题
- 8. 有关mexLasso功能的一些问题
- 9. 有关Qt pro-file的一些问题
- 10. 有关posix_memalign的一些问题
- 11. 有关Facebook Score API的一些问题
- 12. 有关UIScrollView的一些问题
- 13. 有关Grails服务的一些问题
- 14. 有关OAuth和Android的一些问题
- 15. 有关$ GOPATH的一些问题
- 16. 有关iTextSharp的一些问题
- 17. 一些与IPv6有关的问题
- 18. 有关System.Threading.Timer和Parallel的一些问题
- 19. 有关OpenLayers的一些问题
- 20. 有关SQL组的一些问题
- 21. 有关内存/ malloc的一些问题
- 22. 有关Java的一些基本问题
- 23. JavaScriptSerializer UTC DateTime问题
- 24. 一些问题有关异常处理
- 25. 有关解决multiplier问题的一些问题Spring View Resolvers
- 26. 关于关注WPF的一些问题
- 27. 有关C++开发人员有关C++的一些问题
- 28. javascriptserializer日期格式问题
- 29. 有一些问题 “的console.log”
- 30. 关于iptables的 “-set-xmark” 有些问题