Сериализуйте некоторые отношения с JSON, но не все - PullRequest
0 голосов
/ 14 февраля 2019

У меня следующая проблема: я пытаюсь сериализовать объект (object1) в Json, используя пакет Newtonsoft.Json.Мне нужно иметь возможность отправить его на сервер.Проблема в том, что object1 имеет несколько ссылочных объектов, некоторые из которых должны быть созданы вместе с object1, но один из них «только для чтения» на сервере, поэтому он должен быть отправлен как отношение.

Я использую string json = JsonConvert.SerializeObject Пример:

<code>
    [DataContract]
    public class Object1
    {
        // Simple Properties
        [JsonProperty(PropertyName = "ext_ref", Order = 1)]
        public string ExtRef { get; set; }
        [JsonProperty(PropertyName = "external_comment", Order = 1)]
        public string ExternalComment { get; set; }
        [JsonProperty(PropertyName = "internal_comment", Order = 1)]
        public string InternalComment { get; set; } 
        [JsonProperty(PropertyName = "object2")]
        public Object2 Object2 { get; set; }
        [JsonProperty(PropertyName = "object3")]
        public Object3 Object3 { get; set; }
    }
</code>

Вот так я и получаю.Это подходит для большинства объектов, но не для всех:

{
"data": {
    "attributes": {         
        "ext_ref": "2573421",
        "external_comment": "Ext Comment",
        "internal_comment": "Internal comment",
        "object2": {
            "data": {
                "attributes": {
                    "xx":"XX", 
                    "yy":"YY"
                },
                "id": "1",
                "type": "object2s"
            },
            "object3": {
            "data": {
                "attributes": {
                    "xx":"XX", 
                    "yy":"YY"
                },
                "id": "1",
                "type": "object3s"
            }
        },          
    },
    "type": "object1"
}

Поскольку объект2 является «особым случаем», где сервер может воспринимать его только как ссылку, он должен выглядеть следующим образомэто:

{
"data": {
    "attributes":{          
        "ext_ref": "2573421",
        "external_comment": "Ext Comment",
        "internal_comment": "Internal comment",
         "object3": {
            "data": {
                "attributes": {
                    "xx":"XX", 
                    "yy":"YY"
                },
                "id": "1",
                "type": "object3s"
            }
    },
    "type": "object1",
    "relationships":{
        "object2": {
            "data": {
                "id": "1",
                "type": "object2s"
            }
        }
     }
}

Теперь мой вопрос таков: есть ли простой способ сделать это?

Я пробовал следующее: Использование атрибута Relationship из JsonApiSerializer Изменение настроек JsonProperty для свойства object2.id Удаление object2.id

Не могу не подумать, что какой-то атрибут должен быть Iможно использовать для получения желаемого результата, но атм.Я застрял

[ПРАВИТЬ] Я добавил пример структуры объекта

1 Ответ

0 голосов
/ 15 февраля 2019

Хорошо, я нашел ошибку.Я использую Newtonsoft.Json для создания Json с этим вызовом: string json = JsonConvert.SerializeObject(order, Format.None, new JsonApiSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); Часть, которая вызвала проблему, была Format.None, которая сделала Json основным Json, а не обычным форматом.Я изменил его на ноль, и я получил желаемый результат.Большой обруч, хочешь сразиться по этому поводу?

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