Невозможно десериализовать запрос JSON POST в WCF с помощью атрибута имени DataContract - PullRequest
0 голосов
/ 06 июля 2019

У меня есть служба WCF, получающая POST-запрос от клиента в формате JSON.В моем сервисе у меня есть класс DataContract, который должен десериализовать мой запрос.Имена полей классов не такие, как в объекте JSON.Поэтому я использую атрибут Name для определения привязки между полями объекта JSON и полями класса WCR.Но это не десериализовать таким образом.Только если я использую одни и те же имена полей как в объекте JSON, так и в классе WCF, я получаю данные запроса правильно.

    [DataContract]
    public class ModifyBatchRequest
    {
        [DataMember(Name = "type")]
        public int TypeID { get; set; }

        [DataMember(Name = "off", IsRequired = false, EmitDefaultValue = false)]
        public int Offers { get; set; }

        [DataMember(Name = "created", IsRequired = false, EmitDefaultValue = false)]
        public RuleData[] NewEntries { get; set; }

        [DataMember(Name = "updated", IsRequired = false, EmitDefaultValue = false)]
        public RuleData[] UpdatedEntries { get; set; }

        [DataMember(Name = "deleted", IsRequired = false, EmitDefaultValue = false)]
        public int[] DeletedEntries { get; set; }
    }

этот объект корректно десериализуется при отправке

{
 TypeID: newOfferTypeId,
 Offers: requestOffers,
 NewEntries: self.newEntries.map(iPrepareEntry),
 UpdatedEntries: self.updatedEntries.map(iPrepareEntry),
 DeletedEntries: self.deletedEntries
};

это не

{
type: newOfferTypeId,
off: requestOffers,
created: self.newEntries.map(iPrepareEntry),
updated: self.updatedEntries.map(iPrepareEntry),
deleted: self.deletedEntries
};
...