我希望使用json.net将枚举反序列化为其字符串表示形式,反之亦然.我可以想出告诉框架应用它的唯一方法StringEnumConverter是注释有问题的属性,如下所示:
[JsonConverter(typeof(StringEnumConverter))]
public virtual MyEnums MyEnum { get; set; }
Run Code Online (Sandbox Code Playgroud)
但是,在我的用例中,全局配置json.net会更方便,所有枚举都使用它进行序列化StringEnumConverter,而不需要额外的注释.
有没有办法这样做,例如在自定义的帮助下JsonSerializerSettings?
我不知道为什么我的参数"ParametroFiltro Filtro"变为空,其他参数"page"和"pageSize"正常.
public class ParametroFiltro
{
public string Codigo { get; set; }
public string Descricao { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的ApiController获取方法:
public PagedDataModel<ParametroDTO> Get(ParametroFiltro Filtro, int page, int pageSize)
Run Code Online (Sandbox Code Playgroud)
我的ajax电话:
var fullUrl = "/api/" + self.Api;
$.ajax({
url: fullUrl,
type: 'GET',
dataType: 'json',
data: { Filtro: { Codigo: '_1', Descricao: 'TESTE' }, page: 1, pageSize: 10 },
success: function (result) {
alert(result.Data.length);
self.Parametros(result.Data);
}
});
Run Code Online (Sandbox Code Playgroud) 我有以下示例C#代码,它们使用svcutils.exe应用程序从xsd自动生成.
[DataContract]
public enum Foo
{
[EnumMember(Value = "bar")]
Bar = 1,
[EnumMember(Value = "baz")]
Baz = 2
}
[DataContract]
public class UNameIt
{
[DataMember(Name = "id")]
public long Id { get; private set; }
[DataMember(Name = "name")]
public string Name { get; private set; }
[DataMember(Name = "foo")]
public Foo Foo { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
以下是单元测试,尝试将示例JSON文档反序列化为UNameIt类.
[TestClass]
public class JsonSerializer_Fixture
{
public const string JsonData = @"{ ""id"":123456,
""name"":""John Doe"",
""foo"":""Bar""}";
[TestMethod]
public void DataObjectSimpleParseTest()
{
DataContractJsonSerializer …Run Code Online (Sandbox Code Playgroud)