如何在不使用延迟加载的情况下加载对象?

时间:2015-04-24 08:48:43

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

我有一个使用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>

1 个答案:

答案 0 :(得分:0)

看看这是否有帮助

&#13;
&#13;
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;}
    }
&#13;
&#13;
&#13;