我有一个名为MyObject的对象,它有几个属性. MyList是MyObject的列表,我使用linq查询填充,然后将MyList序列化为json.我最终得到这样的东西
- List<MyObject> MyList = new List<MyObject>();
- MyList = TheLinqQuery(TheParam);
- var TheJson = new System.Web.Script.Serialization.JavaScriptSerializer();
- string MyJson = TheJson.Serialize(MyList);
我想要做的是仅序列化MyObject的一部分.例如,我可能有Property1,Property2 …… Propertyn,我希望MyJson只包含Property3,Property5和Property8.
我想到了一种方法,通过创建一个只有我想要的属性的新对象,然后从那里创建一个新的序列化列表.这是最好的方式还是有更好/更快的方式?
谢谢.
解决方法
- // simple dummy object just showing what "MyObject" could potentially be
- public class MyObject
- {
- public String Property1;
- public String Property2;
- public String Property3;
- public String Property4;
- public String Property5;
- public String Property6;
- }
- // custom converter that tells the serializer what to do when it sees one of
- // the "MyObject" types. Use our custom method instead of reflection and just
- // dumping properties.
- public class MyObjectConverter : JavaScriptConverter
- {
- public override object Deserialize(IDictionary<string,object> dictionary,Type type,JavaScriptSerializer serializer)
- {
- throw new ApplicationException("Serializable only");
- }
- public override IDictionary<string,object> Serialize(object obj,JavaScriptSerializer serializer)
- {
- // create a variable we can push the serailized results to
- Dictionary<string,object> result = new Dictionary<string,object>();
- // grab the instance of the object
- MyObject myobj = obj as MyObject;
- if (myobj != null)
- {
- // only serailize the properties we want
- result.Add("Property1",myobj.Property1);
- result.Add("Property3",myobj.Property3);
- result.Add("Property5",myobj.Property5);
- }
- // return those results
- return result;
- }
- public override IEnumerable<Type> SupportedTypes
- {
- // let the serializer know we can accept your "MyObject" type.
- get { return new Type[] { typeof(MyObject) }; }
- }
- }
然后你在哪里序列化:
- // create an instance of the serializer
- JavaScriptSerializer serializer = new JavaScriptSerializer();
- // register our new converter so the serializer knows how to handle our custom object
- serializer.RegisterConverters(new JavaScriptConverter[] { new MyObjectConverter() });
- // and get the results
- String result = serializer.Serialize(MyObjectInstance);