Как я могу установить атрибуты и их значения для сложной Json полезной нагрузки и сериализации? - PullRequest
0 голосов
/ 21 марта 2020

У меня есть следующая структура в моей структуре. У меня есть помощник, где у меня есть следующий код атрибута, код резолвера и метод сериализации. Ссылка на это в другой части вопроса Как создать один класс модели для использования с несколькими методами API, требующими различных JSON полезных нагрузок?

Теперь у меня есть любой API, который принимает Большая полезная нагрузка с объектом root. Как я могу использовать метод SerializeForApiMethod для этого, так как он имеет объект root. Я пытаюсь установить значения в той же модели объекта ссылки для этой Jsonpayload.

// Вот схема Json

{
  "tagNode": {
    "query": null,
    "type": 0,
    "filter": null,
    "ldapPaths": null,
    "editPermissions": 0,
    "id": 0,
    "disallowed": false,
    "name": "NewTag"
  },
  "parentId": 0
}

//Model class
public class TagModel
{
   public static TagModel mode = new TagModel
   {
            endpointIds = new List<int> { -2147483612, -2147483611 },
            tagIds = new List<int> { 35, 37 }, 
            id = -2147483639,
            parentId = 37,
            nodeId = 1,
            oldParentId = null,
            isEndpoint = false,
            state = 2,
            destinationTag = 2,



   };

    //This Object I am Confused on how to Serialize as above schema it in the 
   //same class whichI w ant to set the values inside the TagModel instance. 
    //Also has same attributes like id and parentId used already in the 
    //other methods and also this complex payload has a class TagNode which is 
    //the root object. 
     [UseWithApiMethods("UpdateTag")]
     public TagNode tagNode { get; set; }
     public object query { get; set; }
     public int type { get; set; }
     public object filter { get; set; }
     public object ldapPaths { get; set; }
     public int editPermissions { get; set; }
     public int id { get; set; }
     public bool disallowed { get; set; }
     public string name { get; set; }
     public int parentId { get; set; }



             //For this Object I am able to serialize it
           [UseWithApiMethods("UpdateTagToRoot")]
            public int nodeId { get; set; }
            [UseWithApiMethods("UpdateTagToRoot")]
            public object oldParentId { get; set; }
            [UseWithApiMethods("UpdateTagToRoot")]
            public bool isEndpoint { get; set; }
            [UseWithApiMethods("UpdateTagToRoot")]
            public int state { get; set; }
            [UseWithApiMethods("UpdateTagToRoot")]
            public int destinationTag { get; set; }



              //For this Object I am able to serialize it
            [UseWithApiMethods("UpdateEndpointsToTags")]
            public List<int> endpointIds { get; set; }
            [UseWithApiMethods("UpdateEndpointsToTags")]
            public List<int> tagIds { get; set; }


          //For this Object I am able to serialize it
           [UseWithApiMethods("UpdateEndpointsFromTags")]
           public int id { get; set; }
           [UseWithApiMethods("UpdateEndpointsFromTags")] 
           public int parentId { get; set; }


}

}

1 Ответ

0 голосов
/ 21 марта 2020

Чтобы получить полезную нагрузку JSON, которую вы хотите использовать с помощью специального распознавателя, из другого вопроса, вам нужно, чтобы ваша структура классов выглядела следующим образом:

public class TagModel
{
    [UseWithApiMethods("UpdateTag")]
    public TagNode tagNode { get; set; }

    public class TagNode
    {
        [UseWithApiMethods("UpdateTag")]
        public object query { get; set; }

        [UseWithApiMethods("UpdateTag")]
        public int type { get; set; }

        [UseWithApiMethods("UpdateTag")]
        public object filter { get; set; }

        [UseWithApiMethods("UpdateTag")]
        public object ldapPaths { get; set; }

        [UseWithApiMethods("UpdateTag")]
        public int editPermissions { get; set; }

        [UseWithApiMethods("UpdateTag")]
        public int id { get; set; }

        [UseWithApiMethods("UpdateTag")]
        public bool disallowed { get; set; }

        [UseWithApiMethods("UpdateTag")]
        public string name { get; set; }
    }

    [UseWithApiMethods("UpdateEndpointsFromTags", "UpdateTag")]
    public int parentId { get; set; }

    ... (other properties for your other API methods) ...
}

Обратите внимание, что вы должны поставить [UseWithApiMethods("UpdateTag")] на свойство tagNode в root классе , а также для всех свойств в TagNode дочернем классе, которые вы хотите включить в JSON. (Это необходимо, потому что распознаватель будет включать только свойства, которые вы специально пометили атрибутом [UseWithApiMethods]. Поэтому вам нужно пометить их все, если вы хотите включить их все).

Для свойства parentId вы уже использовали его для метода UpdateEndpointsFromTags, но это не проблема; Вы также можете использовать его для других методов, таких как UpdateTag. Вам просто нужно добавить имена методов к атрибуту [UseWithApiMethods] следующим образом:

    [UseWithApiMethods("UpdateEndpointsFromTags", "UpdateTag")]
    public int parentId { get; set; }

Вот скрипка, которая демонстрирует: https://dotnetfiddle.net/6TqbFz

Надеюсь, это это то, что вы ищете и разрешает вашу путаницу.

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