我有一个名为DataItem的类,它有三个属性:Id,DataValue和CreatedDateTime。属性在类中按从上到下的顺序定义。这也是我希望在JSON导出中看到属性的顺序。问题是DataItem对象和JSON导出中的属性按字母顺序排序。虽然这种格式在技术上没有任何问题,但这是一个可读性的问题。如何控制JSON导出中的属性顺序?
我检查了实例化的dataItem,并按字母顺序列出了属性。这没关系,我理解不按字母顺序排序属性的潜在可用性问题。
public static List<DataItem>GetAllDataItems()
{
List<DataItem> dataItems = new List<DataItem>();
SqlConnection conn = NetduinoDb.GetConnection();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "Select Id, DataValue, CreatedDateTime from XXX";
cmd.CommandType = CommandType.Text;
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
DataItem dataItem = new DataItem
{
Id = reader["Id"].ToString(),
DataValue = reader["DataValue"].ToString(),
CreatedDateTime = reader["CreatedDateTime"].ToString()
};
dataItems.Add(dataItem);
}
reader.Close();
conn.Close();
return dataItems.ToList();
}
此方法在我的服务实现中,并返回DataItems列表。我想我需要在这里做点什么,但不知道是什么或怎么做。
public List<DataItem> GetCollection()
{
return DataRetriever.GetAllDataItems();
}
答案 0 :(得分:18)
DataContractJsonSerializer
考虑具有DataMember
属性的Order
属性。您可以使用它来告诉序列化程序您想要序列化的成员的顺序。
[DataContract]
class DataItem
{
[DataMember(Order = 1)]
public string Id { get; set; }
[DataMember(Order = 2)]
public string DataValue { get; set; }
[DataMember(Order = 3)]
public string CreatedDateTime { get; set; }
}
根据需要调整顺序,但这通常是在WCF中完成的方式。
答案 1 :(得分:1)
我认为DataContractJsonSerializer和JSON.NET都不支持字段顺序。
如果Object像只有3个字段一样简单,你可以自己构造JSON字符串。