C#でJSONファイルを扱う
.NetFrameworkの機能でJSONをパース
System.Runtime.Serialization.Jsonを使用する。
- JSON to DataContractクラスはMSからコンバートツールが出ていない
- JSON to DataContractクラス生成はWEBベースなら下記サイトでできる。
痒い所に手が届かないのでここで作ったのを成型すると良いかも。
http://jsontodatacontract.azurewebsites.net/ - DataMemberがJSONに存在しない時はデシリアライズでnullになる
FileConfig.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[DataContract] public partial class FileConfig { [DataMember] public string file_name; [DataMember] public string copyright; [DataMember] public string[] include_files; [DataMember] public string @namespace; [DataMember] public string[] definitions; } |
Program.cs
1 2 3 4 5 6 7 8 |
StreamReader sr = new StreamReader(@"D:\prj\software\codegeneration\JsonResource\Resources\GpuEnum\FileConfig.json"); var serializer = new DataContractJsonSerializer(typeof(FileConfig)); var deserialized = (FileConfig)serializer.ReadObject(sr.BaseStream); sr.Close(); |
参考:https://dev.classmethod.jp/etc/c-sharp-json/
JSONの命名規則
msのサンプルが参考になる。
参考:https://docs.microsoft.com/en-us/bingmaps/rest-services/json-data-contracts
DataContractJsonSerializerの挙動を変える
DataContractクラスでOnDeserializedMethod()等をオーバーライドする。JSONのある要素の値位しか取れないので大したことはできない。デシリアライズ時に値がパスであればそのパスをオープンして情報を取得するという事をやりたかったのだが…。
参考:https://docs.microsoft.com/en-us/dotnet/standard/serialization/custom-serialization
コメントを残す