簡體   English   中英

C#:將JSON原語反序列化為.NET復雜類型

[英]C#: Deserializing JSON primitives into .NET complex types

我有一個名為config.json的文件。 這是它的內容:

{
    dataSources:
    [
        "http://www.blahblah.com/blah",
        "http://www.blahblah.com/blah2",
        ...
    ],

    skills:
    [
        {
            "name": "foobaris",
            "regex": "pattern"
        },
        ...
    ]
}

我想盡可能簡單,簡潔地從這些數據中創建一個Config對象。 Config定義為:

public class Config
{
    public IEnumerable<Uri> DataSources { get; set; }
    public IEnumerable<KeyValuePair<string, Regex>> Skills { get; set; }
}

什么是最簡單的路線?

因為Config.DataSourcesUri ,而.SkillsRegex ,所以我現在必須首先將配置文件derserialize(即RawConfig rawConfig = new JavaScriptSerializer().Deserialize<RawConfig>(configFileContents) )到這個結構中:

public struct RawConfig
{
    public IEnumerable<string> DataSources { get; set; }
    public IEnumerable<RawConfigSkill> Skills { get; set; }
}

public struct RawConfigSkill
{
    public string Name { get; set; }
    public string Regex { get; set; }
}

...然后將該結構轉換為Config (例如, new Config(rawConfig) )。

我可以取消這個嗎?

我經常看到這種情況。

我們有一些需要從文本格式解析的數據,我們有工具為我們解析,我們需要在我們自己的某個特定對象圖中得到結果。

這通常發生在json,自定義應用程序配置部分,使用命令行參數......僅舉幾個場景。

在這些情況下,我個人更喜歡將步驟分開。 使用工具/庫(在您的情況下,JavaScriptSerializer)將文本解析為中間對象。 然后將中間對象映射到最終對象(換句話說,你已經在做什么)。

試圖一舉完成它通常會使它變得比它需要的更復雜。 在一個方法調用下封裝這兩個操作並完成它。

我們只是試圖讓解析工具輸出我們想要的確切對象圖,這幾乎總是比它的價值更麻煩。

當然,很多事情可以使第二步更簡單 - LINQ到對象表達式,AutoMapper等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM