2016-05-19 10 views
2

jsonファイルから読み込み、クラスの一覧をUIに返す関数を使用しています。私のクラスは、このjsonのC#での読み込み

protected static T ReadFromJsonFile1<T>() where T : new() 
     { 
      TextReader JsonReader = null; 
      try 
      { 
       var filePath = ConfigurationManager.AppSettings.Get("UsecaseListPath"); 
       if (File.Exists(filePath)) 
       { 
        JsonReader = new StreamReader(filePath); 
        var fileContents = JsonReader.ReadToEnd(); 
        return JsonConvert.DeserializeObject<T>(fileContents); 
       } 
       else 
       { 
        return new T(); 
       } 
      } 
      finally 
      { 
       if (JsonReader != null) 
        JsonReader.Close(); 
      } 
     } 
のような関数が)この

List<UseCase> usecaseList = new List<UseCase>(); 
ReadUsecaseContentFronJsonFile1(); 
     usecaseList = UseCaseList(); 

UseCaseList(のようなものですJSONファイルから読み出す機能

private List<UseCase> UseCaseList() 
     { 
      List<UseCase> usecaseList = new List<UseCase>(); 
      foreach (var value in deserializedData1.Values) 
      { 
       UseCase objUC = new UseCase(); 

       objUC.UseCaseId = value.UseCaseId; 
       objUC.UseCaseDescription = value.UseCaseDescription; 
       usecaseList.Add(objUC); 
      } 
      return usecaseList;//isSigRequired; 
     } 

private void ReadUsecaseContentFronJsonFile1() 
     { 
      deserializedData1 = ReadFromJsonFile1<Dictionary<string, UseCase>>(); 
     } 

ある

public class UseCase 
    { 
     public string UseCaseId { get; set;} 
     public string UseCaseDescription { get; set;} 
    } 

です

jsonファイルの値が取得できません。 n(非直列化データ1)。何が問題なの?

私のJSONファイルがある:JSON文書の冒頭に

{ 

    "UseCases": { 
     "UseCase": [{ 
      "UseCaseId": "CCS01", 
      "UseCaseDescription": "Add Device to CHF device log" 
     }, { 
      "UseCaseId": "CCS02", 
      "UseCaseDescription": "Remove device from CHF device log" 
     }, { 
      "UseCaseId": "CCS03", 
      "UseCaseDescription": "Restore CHF Device Log" 
     } 
} 

答えて

0

作品:

(以前の記事で指摘したように)あなたのJSONはこれに変更されて提供さ
static void Main(string[] args) 
{ 
    var fileName = @"c:\temp\test.json"; 
    var reader = new StreamReader(fileName); 
    var fileContent = reader.ReadToEnd(); 

    var useCases = JsonConvert.DeserializeObject<Dictionary<string, List<UseCase>>>(fileContent); 
    Console.WriteLine("Done."); 
} 

{ 
    "UseCases": [{   
      "UseCaseId": "CCS01", 
      "UseCaseDescription": "Add Device to CHF device log" 
     }, { 
      "UseCaseId": "CCS02", 
      "UseCaseDescription": "Remove device from CHF device log" 
     }, { 
      "UseCaseId": "CCS03", 
      "UseCaseDescription": "Restore CHF Device Log" 
     }] 
} 
+0

はいuseCasesでリストの値を取得しています。しかし、リストに変換する方法 ??? –

1

ルック:

{ 
    "UseCases": { 
     "UseCase": [{ 

それはあなたが含まれているオブジェクトを含むオブジェクトを含むルートオブジェクトを持っていることを言いますリスト、またはそれ以上):

  1. ルートオブジェクトには、オブジェクトである "UseCases"という名前のフィールドが含まれています。
  2. フィールド "ユースケース" それは、プロパティが含まれていコレクション

コードである "ユースケース":

// For the root object which contains the "UseCases" field 
public class RootObject 
{ 
    public UseCasesContainer UseCases { get; set; } 
} 

// For the "UsesCases" field, the tricky thing is that 
// it's not a collection but an object 
public class UseCasesContainer 
{ 

    // ..which contains a collection field. 
    public Collection<UsesCase> UsesCase { get; set; } 
} 

は、コレクション自体は、指定されたあなたのようなUseCaseオブジェクトが含まれています。あなたのJSONだけあなたがフィールドなしで文書を作成している可能性がユースケースが含まれている必要がある場合は

var rootObject = JsonConvert.DeserializeObject<RootObject>(yourJson); 

//don't be fooled by the property name, this is the collection 
var allUseCases = rootObject.UseCases.UseCase; 

:したがって、それはあなたのようなjson.net使用することができますデシリアライズする

[ 
     { 
      "UseCaseId": "CCS01", 
      "UseCaseDescription": "Add Device to CHF device log" 
     }, { 
      "UseCaseId": "CCS02", 
      "UseCaseDescription": "Remove device from CHF device log" 
     }, { 
      "UseCaseId": "CCS03", 
      "UseCaseDescription": "Restore CHF Device Log" 
     } 
] 

..どのデシリアライズされた可能性があります:

関連する問題