Мой клиент мигрирует из веб-CRM, который предоставил им только экспорт XML своих данных.
Экспорт занимает 190 тыс. Строк со многими вложенными объектами.
Я пробовал много онлайн-инструментов, чтобы попытаться преобразовать XML в пригодный для использования класс в C # с ограниченным успехом, включая попытку преобразовать его вJSON использовать QuickType.IO безрезультатно.
Моя цель - использовать Entity Framework (который я использовал только в его самой базовой форме) для создания базы данных SQL Server из файла XML, чтобы я могинтегрировать его и вставлять записи в их новую CRM на основе SQL Server.
Я использовал Visual Studio «Специальная вставка> XML как классы», которая, казалось, лучше всего справлялась с созданием классов.Однако из-за формата экспорта XML он создал такие классы:
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public partial class exportContactActivitiesCall
{
private object[] itemsField;
private ItemsChoiceType4[] itemsElementNameField;
private uint idField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("comments", typeof(exportContactActivitiesCallComments))]
[System.Xml.Serialization.XmlElementAttribute("dateoccured", typeof(string))]
[System.Xml.Serialization.XmlElementAttribute("details", typeof(string))]
[System.Xml.Serialization.XmlElementAttribute("duration", typeof(byte))]
[System.Xml.Serialization.XmlElementAttribute("id", typeof(uint))]
[System.Xml.Serialization.XmlElementAttribute("parent", typeof(uint))]
[System.Xml.Serialization.XmlElementAttribute("timerecords", typeof(exportContactActivitiesCallTimerecords))]
[System.Xml.Serialization.XmlElementAttribute("type", typeof(string))]
[System.Xml.Serialization.XmlChoiceIdentifierAttribute("ItemsElementName")]
public object[] Items
{
get
{
return this.itemsField;
}
set
{
this.itemsField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("ItemsElementName")]
[System.Xml.Serialization.XmlIgnoreAttribute()]
public ItemsChoiceType4[] ItemsElementName
{
get
{
return this.itemsElementNameField;
}
set
{
this.itemsElementNameField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute()]
public uint id
{
get
{
return this.idField;
}
set
{
this.idField = value;
}
}
}
[System.SerializableAttribute()]
[XmlTypeAttribute(IncludeInSchema = false)]
public enum ItemsChoiceType4
{
/// <remarks/>
comments,
/// <remarks/>
dateoccured,
/// <remarks/>
details,
/// <remarks/>
duration,
/// <remarks/>
id,
/// <remarks/>
parent,
/// <remarks/>
timerecords,
/// <remarks/>
type,
}
Я попытался использовать XmlSerializer и EF так:
XmlSerializer serializer = new XmlSerializer(typeof(export));
using (FileStream fileStream = new FileStream("content.xml", FileMode.Open))
{
var result = (export)serializer.Deserialize(fileStream);
using (var ctx = new ExportContext())
{
ctx.Export.AddRange(result.contact);
ctx.SaveChanges();
}
}
Хотя это, кажется, создаетБаза данных без ошибок, она только импортировала поле ID для каждой записи.
Я начал преобразовывать классы, созданные Visual Studio, в объекты вместо перечисления itemChoiceType.И хотя я добиваюсь успеха с этим, мне, вероятно, потребуется некоторое время, чтобы завершить.
Я подумал, что это может быть хорошей возможностью окунуться в мир Сущности и посмотреть, знает ли кто-нибудь, может ли Сущность повлиять на нее.то, что мне нужно.
Или, если кто-нибудь знает хороший способ добиться того, чего я хочу.