2013-10-07 25 views
3

我创建了一个灵活的框架来为第三方开发人员创建和存储设置。使用JavaScriptSerializer创建自我构建对象(等同于JSON.PARSE)

我们做出的一个更好的选择是创建一个系统,开发人员使用JSON创建自己的设置,并在以后简单地序列化对象。

I.E.

public class YammerConfig 
{ 
    public string yammerClientId { get; set; } 
    public string yammerNetwork { get; set; } 

    public YammerConfig(string js) 
    { 
     var ser = new JavaScriptSerializer(); 
     var sam = ser.Deserialize<YammerConfig>(js); 
     yammerClientId = sam.yammerClientId; 
     yammerNetwork = sam.yammerNetwork; 
    } 
} 

这是一种将设置存储在数据库中的有效方法,无需为独特的信息集重新配置新表。

我想更进一步,JavaScript本身的做法,以及不需要手动序列化的动态创建对象。

是否有可能在.NET C#中创建等效的json.parse

+0

如果你看DeserializeObject方法的MSDN文档,它说你可以有__type属性来指定类型,那你在找什么? –

回答

3

为什么你不使用扩展方法

例如。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Script.Serialization; 

namespace Stackoverflow.Helpers 
{ 
    public static class JsonHelper 
    { 
     private static JavaScriptSerializer ser = new JavaScriptSerializer(); 
     public static T ToJSON<T>(this string js) where T : class 
     { 
      return ser.Deserialize<T>(js); 
     } 

     public static string JsonToString(this object obj) 
     { 
      return ser.Serialize(obj); 
     } 
    } 
} 

使用方便

//Deserialize 
string s = "{yammerClientId = \"1\",yammerNetwork = \"2\"}";  
YammerConfig data = s.ToJSON<YammerConfig>(); 

//Serialize 
string de = data.JsonToString(); 
1

你可以使用Newtonsoft.Jsonhome)做反序列化很简单。这只是一条线路,并且比内置线路的工作方式更好。

var settings = JsonConvert.DeerializeObject<YammerSettings>(json); 
var json  = JsonConvert.SerializeObject(yammerSettingsObject); 

// you can also serialized and deserialize anon objects, control formatting, 
// do dictinaries and lists directly, datasets, and on and on 

看看这个网站,了解更多Examples

如果这并不能掩盖你在找什么,你可以更具体一点吗?这是我们唯一使用的JSON库,它处理所有事情。