如果我有一个看起来像这样的课程
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#中生成一个可以工作的对象。
答案 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; }
}