【问题标题】:How to load objects without using lazy loading?如何在不使用延迟加载的情况下加载对象?
【发布时间】:2015-04-24 08:48:43
【问题描述】:

我有一个包含 EF、MVC 和 Web API 的项目。当我们第一次创建模型时,列表是虚拟的,用于启用延迟加载。这给出了错误The 'ObjectContent1' type failed to serialize the response body for content type 'application/xml; charset=utf-8'.,因此我们决定移除延迟加载。

现在,当我们通过 Web API 获取对象时,我们会得到像 <DossiersAlsMedebeheerder i:nil="true"/> 这样的标签。它声明对象是null,但我们想要加载更多数据,至少是列表中对象的ID。

有没有一种方法可以在不使用延迟加载的情况下做到这一点?我们是 C# 的新手,但在一个学校项目中需要这个,我们必须在 Web API 和 Android 应用程序之间进行通信。

型号:

public class Gebruiker
{
    [Key]
    public int GebruikerID { get; set; }

    [Required]
    public string Voornaam { get; set; }

    [Required]
    public string Familienaam { get; set; }

    [Required]
    [EmailAddress]
    [Display(Name = "Email")]
    public string MailAdres { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "Het {0} moet minstens {2} tekens lang zijn.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "Wachtwoord")]
    public string Wachtwoord { get; set; }


    [DataType(DataType.Password)]
    [Display(Name = "Bevestig Wachtwoord")]
    [Compare("Wachtwoord", ErrorMessage = "Het wachtwoord en de bevestiging komen niet overeen.")]
    public string BevestigWachtwoord { get; set; }


    public GebruikerStatus GebruikerStatus { get; set; }
    public Gebruikerstype Gebruikerstype { get; set; }


    [Display(Name = "Geboorte Datum")]
    //[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
    public DateTime GeboorteDatum { get; set; }

    [Required]
    public int Postcode { get; set; }

    [Required]
    public string Gemeente { get; set; }

    [Required]
    public string Gebruikersnaam { get; set; }

    public DateTime LaatstGezien { get; set; }

    public List<Module> ModulesAlsExpert { get; set; }
    public List<Antwoord> Antwoorden { get; set; }
    public List<Dossier> DossiersAlsMedebeheerder { get; set; }
    public List<Like> Likes { get; set; }

}

XML(输出):

<ArrayOfGebruiker>
    <Gebruiker>
        <Antwoorden i:nil="true"/>
        <BevestigWachtwoord>test123</BevestigWachtwoord>
        <DossiersAlsMedebeheerder i:nil="true"/>
        <Familienaam>VG</Familienaam>
        <GeboorteDatum>1993-04-10T00:00:00</GeboorteDatum>
        <GebruikerID>1</GebruikerID>
        <GebruikerStatus>Toegelaten</GebruikerStatus>
        <Gebruikersnaam>Laurens</Gebruikersnaam>
        <Gebruikerstype>Expert</Gebruikerstype>
        <Gemeente>Leuven</Gemeente>
        <LaatstGezien>2009-04-10T00:00:00</LaatstGezien>
        <Likes i:nil="true"/>
        <MailAdres>Laurens.vg@gmail.com</MailAdres>
        <ModulesAlsExpert i:nil="true"/>
        <Postcode>8000</Postcode>
        <Voornaam>Laurens</Voornaam>
        <Wachtwoord>test123</Wachtwoord>
    </Gebruiker>
</ArrayOfGebruiker>

【问题讨论】:

    标签: c# entity-framework serialization asp.net-web-api lazy-loading


    【解决方案1】:

    看看有没有帮助

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    using System.Xml;
    using System.Xml.Serialization;
    
    
    namespace ConsoleApplication19
    {
        class Program
        {
            const string FILENAME = @"c:\temp\Test.xml";
            static void Main(string[] args)
            {
               ArrayOfGebruiker arrayOfGebruiker = new ArrayOfGebruiker(){
                   Gebruiker = new List<Gebruiker>(){
                       new Gebruiker {
                           antwoorden = new I() { nil = true},
                           bevestigWachtwoord = "test123",
                           dossiersAlsMedebeheerder = new I(){ nil =true},
                           familienaam = "VG",
                           geboorteDatum = DateTime.Parse("1993-04-10T00:00:00"),
                           gebruikerID = 1,
                           gebruikerStatus = "Toegelaten",
                           gebruikersnaam = "Laurens",
                           gebruikerstype = "Expert",
                           gemeente = "Leuven",
                           LaatstGezien = DateTime.Parse("2009-04-10T00:00:00"),
                           likes = new I(){ nil = true},
                           mailAdres = "Laurens.vg@gmail.com",
                           modulesAlsExpert = new I(){nil = true},
                           postcode = 8000,
                           voornaam = "Laurens",
                           wachtwoord = "test123"
                       }
                   }
               };
               XmlSerializer serializer = new XmlSerializer(typeof(ArrayOfGebruiker));
    
               StreamWriter writer = new StreamWriter(FILENAME);
               XmlSerializerNamespaces _ns = new XmlSerializerNamespaces();
               //_ns.Add("", "");
               //serializer.Serialize(writer, icp, _ns);
               serializer.Serialize(writer, arrayOfGebruiker);
               writer.Flush();
               writer.Close();
               writer.Dispose();
    
               XmlSerializer xs = new XmlSerializer(typeof(ArrayOfGebruiker));
               XmlTextReader reader = new XmlTextReader(FILENAME);
               ArrayOfGebruiker newArrayOfGebruiker = (ArrayOfGebruiker)xs.Deserialize(reader);
                     
            }
    
        }
    
        [XmlRoot("ArrayOfGebruiker")]
        public class ArrayOfGebruiker
        {
            [XmlElement("Gebruiker")]
            public List<Gebruiker> Gebruiker {get;set;}
        }
        [XmlRoot("Gebruiker")]
        public class Gebruiker
        {
            [XmlElement("Antwoorden")]
            public I antwoorden {get;set;}
            [XmlElement("BevestigWachtwoord")]
            public string bevestigWachtwoord {get;set;}
            [XmlElement("DossiersAlsMedebeheerder")]
            public I dossiersAlsMedebeheerder {get;set;}
            [XmlElement("Familienaam")]
            public string familienaam {get;set;}
            [XmlElement("GeboorteDatum")]
            public DateTime geboorteDatum {get;set;}
            [XmlElement("GebruikerID")]
            public int gebruikerID {get;set;}
            [XmlElement("GebruikerStatus")]
            public string gebruikerStatus {get;set;}
            [XmlElement("Gebruikersnaam")]
            public string gebruikersnaam {get;set;}
            [XmlElement("Gebruikerstype")]
            public string gebruikerstype {get;set;}
            [XmlElement("Gemeente")]
            public string gemeente {get;set;}
            [XmlElement("LaatstGezien")]
            public DateTime LaatstGezien {get;set;}
            [XmlElement("Likes")]
            public I likes {get;set;}
            [XmlElement("MailAdres")]
            public string mailAdres {get;set;}
            [XmlElement("ModulesAlsExpert")]
            public I modulesAlsExpert {get;set;}
            [XmlElement("Postcode")]
            public int postcode {get;set;}
            [XmlElement("Voornaam")]
            public string voornaam {get;set;}
            [XmlElement("Wachtwoord")]
            public string wachtwoord {get;set;}
        }
        public class I
        {
            [XmlAttribute(AttributeName = "nil")]
            public bool nil {get;set;}
        }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-04
      • 1970-01-01
      • 2018-07-30
      相关资源
      最近更新 更多