2016-12-13 26 views
0

JSON.Netを使用してasp net用のカスタムJsonConverterを作成する方法の例があれば、文字列だけでなくTextReaderまたはStreamReaderを使用しているのでしょうか。たとえば、カスタムJsonConvertクラスを使用して、このような例http://www.newtonsoft.com/json/help/html/CustomJsonConverter.htm があります http://www.newtonsoft.com/json/help/html/DeserializeWithJsonSerializerFromFile.htmカスタムJson.Netコンバータ文字列の代わりにstreamreaderを使用

// deserialize JSON directly from a file 
using (StreamReader file = File.OpenText(@"c:\movie.json")) 
{ 
    JsonSerializer serializer = new JsonSerializer(); 
    // somehow make serializer use a custom JsonConverter 
    Movie movie2 = (Movie)serializer.Deserialize(file, typeof(Movie)); 
    // hoping that movie2 contains the custom converted json 
} 

答えて

2

あなたは希望コンバータとJsonSerializerSettingsを使用してJsonSerializerを構築することができます。

var settings = new JsonSerializerSettings 
{ 
    Converters = { new KeysJsonConverter(typeof(Employee)) }, 
}; 
var serializer = JsonSerializer.CreateDefault(settings); 

次にあなたが現在ストリームから直接読み込むためにやっているようシリアライザを使用します。

参考:JsonSerializer.CreateDefault(JsonSerializerSettings)のドキュメント

global default settingsを使用しない場合は、代わりにJsonSerializer.Create(JsonSerializerSettings)を使用してください。ただしJsonConvert.DeserializeObject<T>()の場合はグローバルなデフォルトを使用するため、DeserializeObject<T>からJsonSerializer.Create()に切り替えると改ざんが発生する可能性があります。この小さな区別は、あなたが見つけたdocumentationに記載されていません。

1
:ストリームリーダーを使用しています。このようなJSONをデシリアライズすることが可能であった場合

string json = 
"{ 
    "Keys": [ 
    "FirstName", 
    "LastName", 
    "Roles" 
    ], 
    "FirstName": "James", 
    "LastName": "Newton-King", 
    "Roles": [ 
    "Admin" 
    ] 
}" 
Employee newEmployee = JsonConvert.DeserializeObject<Employee>(json, new KeysJsonConverter(typeof(Employee))); 

は、しかし、私は思っていました

StreamReaderには、文字列を返すReadToEnd()関数があります。

string jsonString = file.ReadToEnd(); 
Movie movie2 = JsonConvert.DeserializeObject<Movie>(jsonString); 
+1

プロパティ、値、配列、オブジェクト全体が同じ行にないため、これは間違いなく役に立ちます。ストリームとして読むことで、あなたが探しているものだけを得ることができます。 – krillgar

+1

ありがとうございました!私は本当に長いファイルだった場合に備えて、文字列をメモリに持っていきたくないので、ReadToEndの使用を避けたかったと思います。私はこれを心に留めておくだろう – James

関連する問題