我有一个名为MyObject的对象,它具有多个属性。MyList是我用linq查询填充的MyObject列表,然后将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);