Те же имена атрибутов класса в сериализации JSON - PullRequest
0 голосов
/ 28 мая 2018

Я использую ContractResolver в своем коде:

 public class ShouldSerializeContractResolver : DefaultContractResolver
{
    List<string> propertyList { get; set; }
    public ShouldSerializeContractResolver(List<string> propertyList)
    {
        this.propertyList = propertyList;
    }               
    protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
    {
        var property = base.CreateProperty(member, memberSerialization);

        property.ShouldSerialize = instance =>
        {
            if (propertyList.Any())
                return propertyList.Contains(property.PropertyName);
            return true;
        };            
        return property;
    }
}

, где propertyList - список обязательных атрибутов для сериализации

Что если в данных будут одинаковые классы и атрибуты??Например:

public class Product
    {
        public int? Id { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public ProductPrice subProductA { get; set; }
        public ProductDiscount subProductB { get; set; }
    }
    public class ProductPrice
    {
        public int? Id { get; set; }
        public string Name { get; set; }
        public Amount amount { get; set; }
    }
    public class ProductDiscount
    {
        public int? SubId { get; set; }
        public string SubName { get; set; }
        public Amount amount { get; set; }
    }
    public class Amount
    {
        public int? amountId { get; set; }
        public string amountName { get; set; }
        public Value value { get; set; }
    }
    public class Value
    {
        public int? valueId { get; set; }
        public string valueName { get; set; }
    }
}

Я хочу сериализовать экземпляр класса Product и сериализовать атрибут Product.ProductPrice.Amount.Value.valueId, но не Product.ProductDiscount.Amount.Value.valueId

string myResponseBody = JsonConvert.SerializeObject(product, Formatting.Indented, new JsonSerializerSettings { ContractResolver = contractResolver });
        return WebOperationContext.Current.CreateTextResponse(myResponseBody,
                    "application/json; charset=utf-8",
                    Encoding.UTF8);

Возможно ли это сделать илине?Как мы можем выбрать необходимый JsonProperty?Можно сравнить DeclaredTypes, но это не работает для глубокой иерархии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...