模型和DTO的序列化模式

时间:2015-03-20 08:19:17

标签: c# xml json serialization asp.net-web-api

我有一些模型,我想使它们可序列化,以便将它们用于休息服务。

目前,我们的实施非常精细。输出可以从ApiController到ApiController不同。我无法清除或删除模型的可枚举。这应该由DTO控制。

我看到很多评论认为DTO已经过时了。但是,我认为模型和演示之间脱钩的想法非常好。

目前这将导致我想要减少的许多物体。

我发现只有一些像memento这样的设计模式建议,但不确定这是否正确。我也找到了使用Mixins的建议但不确定它是否有助于解决我的问题。

我确信有很多我没看到的最佳做法,因为我只是在搜索错误的条款。

仅使用一些伪代码来澄清我的意思。

public class PersonEntity
{
    public string Name { get; set; }

    public int Age { get; set; }

    public string Details { get; set; }

    public List<string> LotsOfSubInformation { get; set; }
}

[Serializable]
public class PersonWithoutSubDtoXml
{
    [XmlElement(ElementName = "Name")]
    public string Name { get; set; }

    [XmlElement(ElementName = "Age")]
    public int Age { get; set; }

    [XmlElement(ElementName = "Details")]
    public XmlCDataSection Details { get; set; }
}

[Serializable]
public class PersonDtoXml
{
    [XmlElement(ElementName = "Name")]
    public string Name { get; set; }

    [XmlElement(ElementName = "Age")]
    public int Age { get; set; }

    [XmlElement(ElementName = "Details")]
    public XmlCDataSection Details { get; set; }

    [XmlArray("LotsOfSubInformation")]
    [XmlArrayItem("Information")]
    public string[] LotsOfSubInformation { get; set; }
}

[Serializable]
public class PersonDtoJson
{
    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("age")]
    public int Age { get; set; }

    [JsonProperty("details")]
    public string Details { get; set; }

    [JsonProperty("lotsOfSubInformation")]
    public string[] LotsOfSubInformation { get; set; }

    public static PersonDtoJson Create(PersonEntity source)
    {
        return new PersonDtoJson
        {
            Age = source.Age,
            Details = source.Details,
            Name = source.Name,
            LotsOfSubInformation = source.LotsOfSubInformation.ToArray()
        };
    }
}

[Serializable]
public class PersonWithoutSubDtoJson
{
    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("age")]
    public int Age { get; set; }

    [JsonProperty("details")]
    public string Details { get; set; }

    public static PersonWithoutSubDtoJson Create(PersonEntity source)
    {
        return new PersonWithoutSubDtoJson
                                      {
                                          Age = source.Age,
                                          Details = source.Details,
                                          Name = source.Name
                                      };
    }
}

0 个答案:

没有答案