2017-03-03 68 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; } 
}