Как разработать модель, чтобы принимать только целые и Guid? - PullRequest
0 голосов
/ 22 марта 2019

Я хочу, чтобы моя модель принимала все 3 различных типа значений в id (в основном только Guid и int)

Это моя модель -

public class Base
    {
        public dynamic Id { get; set; }
        public string Type { get; set; }
    }

Это мой json-

{
                "id": "31367556-cda7-4fce-9d8a-2cd6f46544f9",
                "type": "form"
},

{
                "id": "123",
                "type": "form"
},

{
                "id": 456,
                "type": "form"
}

1 Ответ

0 голосов
/ 22 марта 2019

Прежде всего вам нужно ответить на следующие вопросы: зачем вам действительно нужен динамический тип?Как ты собираешься его использовать?После этого вы можете выбрать подход для реализации.Может быть, вам нужна только строка.

Другой подход заключается в использовании до 2 свойств и, например, enum, которые указывают, какой идентификатор следует выбрать.

Создайте модель данных, которая принимает строку

public class Base
    {
        public string Id { get; set; }
        public string Type { get; set; }
    }

И после того, как вы получили и проанализировали его, вам нужно сопоставить этот Data Transfer Model с Model и использовать его в вашем приложении только Model типов.

Отображение может быть

//your ApplicationModel
public class BaseModel
{
  public Guid GuidId{get;set;}
  public int Id{get;set;}
  public IdType{get;set;}

  public enum IdType
  {
     Guid,
     Int
  }
}

public BaseModel Map(Base dto)
{
  var model=new BaseModel{Type= dto.Type};
  var guidResult = Guid.TryParse(dto.Id,out model.GuidId);
  if(!guidResult) int.TryParse(dto.Id, out model.Id);
  model.IdType = guidResult?IdType.Guid:IdType.Int;
  return model
}

использование типа dynamic для меня - плохая практика.Я знаю только несколько случаев, когда это приемлемо.Более подробную информацию вы можете найти здесь: Считается ли использование динамики плохой практикой?

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