使用反射更改特定模型中的所有变量

时间:2018-07-24 18:07:15

标签: c# entity-framework-6 entity system.reflection

我有一个从Json File生成的大模型,并且向所有类添加了一个名为Sigla_Container的字段。如何直接为所有名称为Sigla_Container的字段设置值,而无需一一设置?

模型如下:

public class ContainerViagemContainer
{
    [Key]
    [JsonProperty("Sigla")]
    public string Sigla_Container { get; set; }
    public object Descricao { get; set; }
    public int Tara { get; set; }
    public int Dimensao { get; set; }
    public object Tipo { get; set; }
}

public class ContainerViagemArmador
{
    [Key]
    [Column(Order = 1)]
    [JsonProperty("Id")]
    public int Id_Armador { get; set; }

    [Key, ForeignKey("ContainerViagemContainer")]
    [Column(Order = 2)]
    public string Sigla_Container { get; set; }
    public virtual ContainerViagemContainer ContainerViagemContainer { get; set; }

    public object CodigoGeParcei { get; set; }
    public string Nome { get; set; }
    public string Sigla { get; set; }
    public object CnpjCpf { get; set; }
    public object Endereco { get; set; }
    public object Cep { get; set; }
    public object Site { get; set; }
}

public class ContainerViagemNavio
{
    [Key]
    [Column(Order = 1)]
    [JsonProperty("Nome")]
    public string Nome_Navio { get; set; }

    [Key, ForeignKey("ContainerViagemContainer")]
    [Column(Order = 2)]
    public string Sigla_Container { get; set; }
    public virtual ContainerViagemContainer ContainerViagemContainer { get; set; }

    public ContainerViagemArmador Armador { get; set; }
    public string ImagemNavio { get; set; }
    public double Comprimento { get; set; }
    public int Lloyd { get; set; }
    public string CallSign { get; set; }
    public int CapacidadeTeus { get; set; }
    public string Shortname { get; set; }
}

public class ContainerViagemJanelaAtracacao
{
    [Key]
    [Column(Order = 1)]
    [JsonProperty("Descricao")]
    public string Descricao_JanelaAtracacao { get; set; }

    [Key, ForeignKey("ContainerViagemContainer")]
    [Column(Order = 2)]
    public string Sigla_Container { get; set; }
    public virtual ContainerViagemContainer ContainerViagemContainer { get; set; }

    public string Dia { get; set; }
    public string Inicio { get; set; }
    public string Fim { get; set; }
}

public class ContainerViagemBerco
{
    [Key]
    [Column(Order = 1)]
    [JsonProperty("Ponto")]
    public string Ponto_Berco { get; set; }

    [Key, ForeignKey("ContainerViagemContainer")]
    [Column(Order = 2)]
    public string Sigla_Container { get; set; }
    public virtual ContainerViagemContainer ContainerViagemContainer { get; set; }

    public string Descricao { get; set; }
    public string Sentido { get; set; }
    public ContainerViagemJanelaAtracacao JanelaAtracacao { get; set; }
}

public class ContainerViagemViagem
{
    [Key]
    [Column(Order = 1)]
    [JsonProperty("Id")]
    public int Id_Viagem { get; set; }

    [Key, ForeignKey("ContainerViagemContainer")]
    [Column(Order = 2)]
    public string Sigla_Container { get; set; }
    public virtual ContainerViagemContainer ContainerViagemContainer { get; set; }

    public string NumeroAtracacao { get; set; }
    public string NumeroViagem { get; set; }
    public string Status { get; set; }
    public string Joint { get; set; }
    public string Servico { get; set; }
    public string MotivoEspera { get; set; }
    public string LiberacaoRecebimento { get; set; }
    public ContainerViagemNavio Navio { get; set; }
    public string ChegadaPrevista { get; set; }
    public string AtracacaoPrevista { get; set; }
    public string SaidaPrevista { get; set; }
    public string DeadLine { get; set; }
    public string Chegada { get; set; }
    public string Atracacao { get; set; }
    public string Saida { get; set; }
    public string InicioOperacao { get; set; }
    public string FimOperacao { get; set; }
    public string TipoOperacao { get; set; }
    public string CodigoCodesp { get; set; }
    public double CaladoAtracacao { get; set; }
    public object CaladoDesatracacao { get; set; }
    public string NumeroViagemImportacao { get; set; }
    public string NumeroViagemExportacao { get; set; }
    public ContainerViagemBerco Berco { get; set; }
    public int PrevisaoDescarga { get; set; }
    public int PrevisaoEmbarque { get; set; }
    public int PrevisaoRemocao { get; set; }
    public string LocalAtracacao { get; set; }
}

public class ContainerViagemCarreta
{
    [Key]
    [Column(Order = 1)]
    public string PlacaCavalo { get; set; }
    [Key]
    [Column(Order = 2)]
    public string PlacaReboque { get; set; }

    [Key, ForeignKey("ContainerViagemContainer")]
    [Column(Order = 3)]
    public string Sigla_Container { get; set; }
    public virtual ContainerViagemContainer ContainerViagemContainer { get; set; }

    public string Entrada { get; set; }
    public string Saida { get; set; }
    public int PesoEntrada { get; set; }
    public int PesoSaida { get; set; }
    public object CNH { get; set; }
    public object Motorista { get; set; }
}

public class ContainerViagemImportador
{
    [Key]
    [Column(Order = 1)]
    [JsonProperty("Id")]
    public int Id_Importador { get; set; }

    [Key, ForeignKey("ContainerViagemContainer")]
    [Column(Order = 2)]
    public string Sigla_Container { get; set; }
    public virtual ContainerViagemContainer ContainerViagemContainer { get; set; }

    public object CodigoGeParcei { get; set; }
    public string Nome { get; set; }
    public object Sigla { get; set; }
    public object CnpjCpf { get; set; }
    public object Endereco { get; set; }
    public object Cep { get; set; }
    public object Site { get; set; }
}

public class ContainerViagemBl
{
    [Key]
    [Column(Order = 1)]
    [JsonProperty("Numero")]
    public string Numero_BL { get; set; }

    [Key, ForeignKey("ContainerViagemContainer")]
    [Column(Order = 2)]
    public string Sigla_Container { get; set; }
    public virtual ContainerViagemContainer ContainerViagemContainer { get; set; }

    public int Lote { get; set; }
    public ContainerViagemImportador Importador { get; set; }
    public object Despachante { get; set; }
    public object Armador { get; set; }
    public object Nvocc { get; set; }
    public string Data { get; set; }
    public string PresencaCarga { get; set; }
    public object DataEnvioPresCarga { get; set; }
    public object StatusEnvioPresCarga { get; set; }
    public object Recinto { get; set; }
    public object Setor { get; set; }
    public object Situacao { get; set; }
    public string Documento { get; set; }
    public object TipoDocumento { get; set; }
    public object DataDocumento { get; set; }
    public object DataArmazenagem { get; set; }
    public object Mercadorias { get; set; }
    public object Containers { get; set; }
    public object Viagem { get; set; }
    public object PortoOrigem { get; set; }
    public object QuantidadeContainers { get; set; }
    public object QuantidadeContainerEntradaTerminal { get; set; }
    public bool Bloqueio { get; set; }
    public object MotivoCaptacao { get; set; }
    public object Status { get; set; }
    public object Desembaraco { get; set; }
    public int CifMoedaOrig { get; set; }
    public object NumeroCE { get; set; }
}

public class ContainerViagemLacresEntrada
{
    [Key]
    [Column(Order = 1)]
    [JsonProperty("Origem")]
    public string Origem_LacresEntrada { get; set; }

    [Key, ForeignKey("ContainerViagemContainer")]
    [Column(Order = 2)]
    public string Sigla_Container { get; set; }
    public virtual ContainerViagemContainer ContainerViagemContainer { get; set; }

    public string Verificado { get; set; }
    public string Tipo { get; set; }
    public object Status { get; set; }
}

public class ContainerViagemLacresSaida
{
    [Key]
    [Column(Order = 1)]
    [JsonProperty("Origem")]
    public string Origem_LacresSaida { get; set; }

    [Key, ForeignKey("ContainerViagemContainer")]
    [Column(Order = 2)]
    public string Sigla_Container { get; set; }
    public virtual ContainerViagemContainer ContainerViagemContainer { get; set; }

    public string Verificado { get; set; }
    public string Tipo { get; set; }
    public string Status { get; set; }
}

public class ContainerViagemAvaria
{
    [Key]
    [Column(Order = 1)]
    [JsonProperty("Local")]
    public string Local_Avaria { get; set; }
    [Key]
    [Column(Order = 2)]
    [JsonProperty("Tipo")]
    public string Tipo_Avaria { get; set; }

    [Key, ForeignKey("ContainerViagemContainer")]
    [Column(Order = 3)]
    public string Sigla_Container { get; set; }
    public virtual ContainerViagemContainer ContainerViagemContainer { get; set; }

    public string Complemento { get; set; }
    public string Descricao { get; set; }
    public string TermoAvaria { get; set; }
}

public class ContainerViagem
{
    [Key]
    [Column(Order = 1)]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ID_ContainerViagem { get; set; }

    [Key, ForeignKey("ContainerViagemContainer")]
    [Column(Order = 2)]
    public string Sigla_Container { get; set; }
    public virtual ContainerViagemContainer ContainerViagemContainer { get; set; }

    public object IdCtis { get; set; }

    public ContainerViagemContainer Container { get; set; }

    public object Exportador { get; set; }
    public ContainerViagemViagem Viagem { get; set; }
    public int TipoViagem { get; set; }
    public string PortoOrigem { get; set; }
    public string PortoDestino { get; set; }
    public object PortoDestinoFinal { get; set; }
    public string Entrada { get; set; }
    public string Saida { get; set; }
    public object StatusScanner { get; set; }
    public string Status { get; set; }
    public string StatusSigvig { get; set; }
    public int PesoManifCarga { get; set; }
    public int PesoManifTara { get; set; }
    public int PesoManifBruto { get; set; }
    public int PesoCarga { get; set; }
    public int PesoBruto { get; set; }
    public int DivergenciaPeso { get; set; }
    public double DivergenciaPesoPorcent { get; set; }
    public bool ExcessoDivergenciaPeso { get; set; }
    public ContainerViagemCarreta Carreta { get; set; }
    public IList<ContainerViagemBl> Bls { get; set; }
    public IList<ContainerViagemLacresEntrada> LacresEntrada { get; set; }
    public IList<ContainerViagemLacresSaida> LacresSaida { get; set; }
    public object TermoAvaria { get; set; }
    public IList<ContainerViagemAvaria> Avarias { get; set; }
    public object Temperatura { get; set; }
    public object SD { get; set; }
    public object Booking { get; set; }
    public object Agendamento { get; set; }
    public object Armador { get; set; }
    public object Imos { get; set; }
    public object Cheio { get; set; }
    public object Regime { get; set; }
    public object Documentos { get; set; }
    public IList<object> Desova { get; set; }
    public int HreqId { get; set; }
    public int TmodId { get; set; }
    public int PesoCargaVGM { get; set; }
    public int PesoTaraVGM { get; set; }
    public int PesoBrutoVGM { get; set; }
}

如您所见,所有类中都有Sigla_Container字段,我尝试使用下面的代码来获取这些字段,但是如何设置这些字段的值?

ContainerViagem containerViagem = JsonConvert.DeserializeObject<ContainerViagem>(strToken["ContainerViagem"].ToString());
                        containerViagem.Container.Sigla_Container = container;

     foreach (var campoJson in containerViagem.GetType().GetProperties())
     {
          if (campoJson.Name.Equals("Sigla_Container"))
          {

          }
     }

1 个答案:

答案 0 :(得分:1)

使用SetValue。将对象实例作为第一个参数,将新值作为第二个参数。

campoJson.SetValue(containerViagem, "New value");