我有一个带有System.Runtime.Serialization属性的模型:
[DataContract]
public class DataTableItemModel
{
[DataMember(Name = "targets")]
public int[] Targets { get; set; }
[DataMember(Name = "visible")]
public bool Visible { get; set; }
[DataMember(Name = "searchable")]
public bool Searchable { get; set; }
[DataMember(Name = "name")]
public string Field { get; set; }
}在Razor Model.DataTablesDescription (这是List<DataTableItemModel>)之后:
@Html.Raw(new JavaScriptSerializer().Serialize(Model.DataTablesDescription))
或
@Html.Raw(Json.Encode(Model.DataTablesDescription))
输出HTML如下所示:
[{"Targets":[0],"Visible":false,"Searchable":false,"Field":"Id"}, ...]
但我料到:
[{"targets":[0],"visible":false,"searchable":false,"name":"Id"},
即受制于DataMember属性。
怎么了?
发布于 2015-04-02 10:17:00
问题是JavaScriptSerializer不考虑您的[DataMember]/[DataContract]。
尝试使用DataContractJsonSerializer
例如:
@{
var serializer = new DataContractJsonSerializer(typeof(DataTableItemModel));
var memoryStream = new MemoryStream();
serializer.WriteObject(memoryStream, Model.DataTablesDescription);
@Html.Raw(new StreamReader(memoryStream).ReadToEnd())
}或者,使用Json.NET代替:
@Html.Raw(JsonConvert.SerializeObject(Model.DataTablesDescription));请参阅MSDN
发布于 2015-04-02 10:17:05
你能试试这个吗?
[DataContract]
public class DataTableItemModel
{
[DataMember]
[DisplayName("targets")]
public int[] Targets { get; set; }
}https://stackoverflow.com/questions/29410304
复制相似问题