Umbraco-将强类型对象映射到IPublishedContent

本文关键字:IPublishedContent 映射 对象 强类型 Umbraco- | 更新日期: 2023-09-27 18:24:05

我正在将Umbraco与另一个web应用程序"联合",并使用Elasticsearch将两个应用程序的数据存储在一个索引中。到目前为止,我只搜索了Umbraco的内容,获取了它的ID,然后使用UmbracHelper检索正确的IPublishedContent项,然后我使用Ditto将其映射到强类型对象[Class1],该对象继承自PublishedContentModel抽象类。

目前在Umbraco应用程序中,Class1对象正在用JSON.Net和输出进行序列化,我无法更改它的结构。由于添加了来自另一个非Umbraco的应用程序的项,我想完全省略从Umbraco检索内容的步骤,而是将所有相关数据直接保存在索引中。这样,我就可以根据索引的内容创建强类型对象。然而,在将项目重新映射到它的DTO[Class1DTO]之后,我发现自己无法将这些映射到Class1上。

显然,我不能再使用Ditto了,因为它只适用于从IPublishedContent及其衍生物进行映射的情况。我曾考虑使用AutoMapper,但问题是,如果不传递IPublishedContent对象,我就无法实例化Class1(因为需要实现PublishedContentModel构造函数)。

我知道如果没有PublishedContentModel继承,我可以复制我所有的强类型对象,但这样做感觉真的不对。有没有办法以某种方式伪造IPublishedContent对象,这样我就可以使用AutoMapper?或者有没有其他方法可以实现同样的产出?

以下示例类:


[JsonObject(MemberSerialization.OptIn)]
public class Class1 : PublishedContentModel
{
    public Class1(IPublishedContent content)
        : base(content)
    {
    }
    [JsonProperty]
    public string type { get; set; }
    [JsonProperty]
    public override int Id { get { return base.Id; } }
    [JsonProperty]
    public override string SomeData { get; set; }
}
[JsonObject(MemberSerialization.OptIn)]
public class Class1DTO
{
    [JsonProperty]
    public string type { get; set; }
    [JsonProperty]
    public int Id { get; set; }
    [JsonProperty]
    public string SomeData { get; set; }
    [JsonProperty]
    public SomeFilter FilterForSearch { get; set; }        
}

Umbraco-将强类型对象映射到IPublishedContent

您不能创建自己版本的不依赖IPublishedContent的PublishedContentModel吗?类似这样的东西:

public abstract class Base
{
    public Int32 Id { get; set; }
    public String Name { get; set; }
    public String Path { get; set; }
    public IList<Int32> PathIds
    {
        get
        {
            return !String.IsNullOrEmpty(Path) ? Path.Split(',').Select(x => Convert.ToInt32(x)).ToList() : null;
        }
    }
    public Int32 ParentId
    {
        get
        {
            if (PathIds.HasItemsAndNotNull() && PathIds.Count >= 2)
                return PathIds[PathIds.Count - 2];
            return -1;
        }
    }
    public Int32 Level { get; set; }
    public DateTime CreateDate { get; set; }
    public DateTime UpdateDate { get; set; }
    public String WriterName { get; set; }
    public String DocumentTypeAlias { get; set; }
}

除非您需要PublishedContentModel上的非常特定的字段。

相关文章:
  • 没有找到相关文章