2013-10-07 55 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庫,它處理所有事情。