将对象列表序列化为Handlebars.js的标记

时间:2017-03-03 13:10:50

标签: c# json serialization 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 });

...如何将其序列化为一个如下所示的Json对象:

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

...所以SortOrder未序列化,属性变为名称和值?

我可以将其与HandleBars.js一起使用。

我尝试使用System.Web.Script.Serialization和System.Runtime.Serialization进行序列化,但我无法让他们忽略SortOrder。

我还尝试手动构造字符串并解析它,但这会生成一组数组而不是显示的属性。

如果我在Javascript中创建一个看起来像上面示例的对象,它可以正常工作,但我似乎无法从C#中生成一个可以工作的对象。

3 个答案:

答案 0 :(得分:0)

您可以使用Newtonsoft json框架将数据序列化为json。 为了达到要求的结果,我认为您应该将列表转换为字典(myList.ToDictionary(k=>k.Name, v=>v.Value)),然后转换为serialise the Dictionary

答案 1 :(得分: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));

答案 2 :(得分: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; }
}