wcf - объекта - сериализация json java



как не вернуть ноль, если поле данных не задано в контракте данных (1)

Вы можете пометить каждый элемент данных, чтобы он не был сериализован, если он нулевой. EmitDefaultValue = false часть: EmitDefaultValue = false

[DataContract]
public class Person
{
    [DataMember(EmitDefaultValue = false)]
    public string id { get; set; }

    [DataMember(EmitDefaultValue = false)]
    public string firstname { get; set; }

    [DataMember(EmitDefaultValue = false)]
    public string lastname { get; set; }

    [DataMember(EmitDefaultValue = false)]
    public string city { get; set; }
}

У меня странная проблема с моим сервисом WCF который возвращает данные в формате JSON . Я хочу вернуть информацию о «Клиенте» на основании запроса, отправленного клиентом.

Клиент может запросить, какие поля информации о клиенте им нужны, а сервис должен отправить только эту информацию о клиенте.

Например: если клиент запрашивает список клиентов и говорит, что ему нужно имя, фамилия, город каждого клиента, то сервер должен отправить ответ json с каждым именем поля и соответствующим значением

Что-то вроде...

[
  {"firstname":"john","lastname":"Goodman","city" :"NY"},
  {"firstname":"brad","lastname":"newman","city" :"LA"}
]

если клиент запрашивает список клиентов только с полями ID и города, то ответ должен выглядеть следующим образом

[
  {"id" :"1234","city" :"NY"},
  {"id":"1235","city" :"LA"}
]

Первоначально я планировал реализовать класс «Заказчик», а затем иметь каждое возможное «поле» в качестве поля этого класса. Затем внутри моего метода обслуживания я получал список полей, указанных клиентом, и создавал экземпляры объектов customer с только теми свойствами, которые были установлены.

Мой рабочий контракт выглядит так

[OperationContract]
[WebGet(BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json, UriTemplate = "Customers?fields={value}")]
List<Customer> GetCustomers(string value);

Но проблема в том, что когда я декорирую класс с помощью «DataContract», а каждое поле - как «DataMember» .... если некоторые свойства не заданы, они все равно десериализуются как NULL при отправке клиенту. Я не хочу, чтобы это случилось.

Также список возможных полей у клиента очень длинный и поэтому класс стал очень большим. Я предпочел бы хранить эти поля как коллекцию enum в моем сервисе, а не как поля класса.

Затем я подумал о том, чтобы моя операция возвращала IDictionary<string,object> а затем добавляла каждое поле и значение итеративно в эту коллекцию. Это не сработало, потому что, когда словарь сериализован, он показывает {"Key:dfas", "Value:34" } и т. Д. И т. Д., А не то, что я хочу

Так что я застрял. Какой лучший способ решить эту проблему?

Могу ли я пометить свой [DataContract] таким образом, чтобы, если свойства [DataMember] не были установлены, т. [DataMember] установлены на ноль, их вообще не следовало бы сериализовать и отправлять клиенту?





datacontractserializer