2017-03-03 35 views
0
標籤

如果我有一個類,看起來像這樣名單成Handlebars.js

public class DataClass 
{ 
    public string Name { get; set; } 
    public string Value { get; set; } 
    public int SortOrder { get; set; } 
} 

...我創建這些的List<> ...

var myList = new List<DataClass>(); 
myList.Add(new DataClass() { Name = "Name1", Value = "Value1", SortOrder = 1 }); 
myList.Add(new DataClass() { Name = "Name2", Value = "Value2", SortOrder = 2 }); 
myList.Add(new DataClass() { Name = "Name3", Value = "Value3", SortOrder = 3 }); 

。我..how可以序列它變成一個JSON對象,看起來像這樣:

{ 
    "Name1": "Value1", 
    "Name2": "Value2", 
    "Name3": "Value3" 
} 

...所以SortOrder不序列化d,並且屬性變成名稱和值?

這是我可以用它與HandleBars.js

我已經嘗試使用System.Web.Script.Serialization和System.Runtime.Serialization序列化,但我無法讓他們忽略SortOrder。

我也嘗試過手動構造字符串並解析它,但是這產生了數組的集合而不是如圖所示的屬性。

如果我在Javascript中創建一個如上例所示的對象,它可以正常工作,但我似乎無法從C#中生成一個可以工作的對象。

+0

這段代碼編譯,甚至?在你的類定義中你的SortOrder是在DataClass初始化時的字符串,SortOrder是int。 – mybirthname

+0

這是一個例子。實際的代碼太大了。 – CompanyDroneFromSector7G

回答

0

試試這個:

StringBuilder sb = new StringBuilder(); 

foreach (var dataClass in myList) 
{ 
    sb.AppendFormat(@"""{0}"":""{1}"",", dataClass.Name, dataClass.Value); 
} 

var result = string.Format(@"{{{0}}}", sb.Remove(sb.Length - 1, 1)); 
0

您可以通過添加DataContract和DataMember屬性類排除屬性。

[DataContract] 
public class DataClass 
{ 
    [DataMember] 
    public string Name { get; set; } 
//Ignored 
    public string Value { get; set; } 
    public int SortOrder { get; set; } 
} 

如果使用Json.Net,您可以使用JsonIgnore

public class DataClass 
{ 
    public string Name { get; set; } 
    //Ignored 
    [JsonIgnore] 
    public string Value { get; set; } 
    [JsonIgnore] 
    public int SortOrder { get; set; } 
}