2016-02-29 57 views
1

如何列出所有我的世界檔案由launcher_profiles.json檔案?如何列出所有我的世界檔案

我試圖使用該網站json2csharp.com,但不幸的是,當它生成類準備好代碼時,他已經返回所有配置文件,就好像它也是一個類。

例如: 我用這個簡單的代碼的Minecraft配置文件...

{ 
"profiles": { 
    "1.7.10": { 
    "name": "1.7.10", 
    "lastVersionId": "1.7.10" 
    } 
    }, 
    "selectedProfile": "1.7.10" 
} 

但是,當我發送上述站點轉換C#它返回:

public class __invalid_type__1710 
{ 
    public string name { get; set; } 
    public string lastVersionId { get; set; } 
} 

public class Profiles 
{ 
    public __invalid_type__1710 __invalid_name__1.7.10 { get; set; } 
} 

public class RootObject 
{ 
    public Profiles profiles { get; set; } 
    public string selectedProfile { get; set; } 
} 

見自己: Json2CSharp

你有什麼辦法我可以讀launcher_profiles.json使用Newtonsoft.Json.Linq的文件minecraft?

+0

http://stackoverflow.com/questions/15709135/rename-property-from-deserialized-javascript應該幫助你。 –

+0

http://stackoverflow.com/questions/6620165/how-can-i-parse-json-with-c – ManoDestra

回答

1

所以問題可能是,launcher_profiles.json不是真正的猶太JSON。

將這個成Json2CSharp明白我的意思是:

{ 
"profiles": [ 
    { 
    "name": "1.7.10", 
    "lastVersionId": "1.7.10" 
    } 
    ], 
    "selectedProfile": "1.7.10" 
} 

這裏的區別是,我已經重新定義了配置文件節點正確表示集合(陣列)這是映射到C#泛型列表。

您可能需要將該文件手動解析爲JSON.Net或其他選項將無法使用無效的json格式。

+1

你可以用[JObject]解析這個(http://www.newtonsoft.com/json/help /html/t_newtonsoft_json_linq_jobject.htm)類,它提供了一種動態的訪問類型與固定的類結構。 – crashmstr

+0

對。這是一種可能有助於半手動分析的工具。事情是,由於我的工藝如何構建這個文件,配置文件「集合」將始終被解析爲唯一命名的屬性。當你剛剛看到一個這樣的命名配置文件時,並不清楚。但考慮我們是否添加了名爲「2.09.5」的配置文件?忽略這兩個都不是有效的c#屬性名稱,那麼產生的對象就不會很容易編寫代碼。 –

1

我通常不會與Linq versions of the Json.Net library一起工作,但我已經想出了一個簡單的例子,說明如何獲取配置文件的所有名稱(不能使用給定的格式序列化爲類)。

class Program 
{ 
    //Add another "profile" to show this works with more than one 
    private static String json = "{ \"profiles\": { \"1.7.10\": { \"name\": \"1.7.10\", \"lastVersionId\": \"1.7.10\" }, \"1.7.11\": { \"name\": \"1.7.11\", \"lastVersionId\": \"1.7.11\" } }, \"selectedProfile\": \"1.7.10\" }"; 

    static void Main(string[] args) 
    { 
     //Parse to JObject 
     var obj = Newtonsoft.Json.Linq.JObject.Parse(json); 

     foreach (var profile in obj["profiles"]) 
     { 
      foreach (var child in profile.Children()) 
      { 
       Console.WriteLine(child["name"]); 
      } 
     } 
    } 
} 
3

雖然在很多情況下很有用,但json2csharp.com並非萬無一失。正如你所看到的,它不處理鍵名是動態的,否則無法轉換爲有效的C#標識符的情況。在這些情況下,您需要對生成的類進行手動調整。例如,您可以使用Dictionary<string, Profile>來代替靜態類來處理對象的動態鍵。

定義你的類是這樣的:

public class RootObject 
{ 
    public Dictionary<string, Profile> profiles { get; set; } 
    public string selectedProfile { get; set; } 
} 

public class Profile 
{ 
    public string name { get; set; } 
    public string lastVersionId { get; set; } 
} 

然後你可以反序列化爲使用或者JavaScriptSerializerJson.Net,無論你喜歡的RootObject類。

下面是使用Json.Net小提琴:https://dotnetfiddle.net/ZlEK63

+0

之後,我該如何返回相同文件'launcher_profiles.json'的'accessToken'? – Nathan

+1

我在您的問題中發佈的示例JSON中的任何地方都沒有看到'accessToken'。 –