ما جدیدا با پروژهای رو به رو شدیم که شغل بی آلایشای اعمال میبخشید؛ طراحی اپلیکیشن در مشهد قرائت یک پوشه JSON. البته روشی که به JSON تبدیل شد حیرانکننده بود. به لحاظ می سید که غامضترین طریق قرائت دادههای JSON که تا به اکنون چشمایم بود. زمانی راه حل این شغل را کاوش می کنیم، با کمال تعجب میبینیم که اکثری از نتیجه ها به عبارتی شغل های سرگردانکننده میباشد.
براین اساس دراین یادگرفتن می خواهیم ببینیم که چطور JSON را در NET Core. تبدیل کنیم.
نصب JSON.NET
درصورتی که پیش از NET Core 3.0. با پروژه ASP.NET Core عمل کردهاید، احتمالا JSON.NET را از پیشین نصب دارید. البته در شرایطی که در اکنون شغل بر روی اپلیکیشن کنسول یا این که Class Library میباشید، بایستی آن را از کنسول package manager با فرمان تحت نصب فرمائید.
Install-Package Newtonsoft.Json
مدرک JSON نمونه ما
برای هدف ها این یادگرفتن، ما میخواهیم یک گواهی JSON خیلی بی آلایش داشته باشیم تا با آن عمل کنیم. این مدرک اینگونه خواهد بود:
{
\"MyStringProperty\": \"StringValue\",
\"MyIntegerProperty\": 1,
\"MySubDocument\": {
\"SubDocumentProperty\": \"SubDocumentValue\"
},
\"MyListProperty\": [
1,
2,
3
]
}
این را در یک پوشه ذخیره می کنیم، و آحاد کاری که بایستی جاری ساختن دهیم، لود آن در یک فن (string) در یک اپ کنسول میباشد:
static void Main(string[] args)
{
var myJsonString = File.ReadAllText(\"myfile.json\");
}
آنگاه این فن را میگیریم، و میبیینیم که به چه شکل دادهها را از آن استحصال کنیم.
به کار گیری از JObject
به لحاظ ما این بدترین شیوه برای تبدیل یک مدرک JSON بلندمرتبه میباشد، ولی به حیث میرسد که جواب سریع در هر پرسش stackoverflow در ارتباط با JSON و C# این میباشد. از نگاه ما این به یک حرفه جادویی متکی میباشد و حقیقتا غامض میباشد.
بیایید ببینیم چطور خواهیم توانست یک پراپرتی بی آلایش string را با استعمال از JObject به دست آوریم:
static void Main(string[] args)
{
var myJsonString = File.ReadAllText(\"myfile.json\");
var myJObject = JObject.Parse(myJsonString);
Console.WriteLine(myJObject.SelectToken(\"MyStringProperty\").Value());
}
بسیار بهتر میباشد، البته این دستور بدین متکی میباشد که در یک فن جادویی ارسال کنیم تا پراپرتی را پیدا کنیم. این وحشتناک وجود ندارد، ولی بهتر هم وجود ندارد.
در صورتی یک زیرمجموعهای از گواهی را بخواهیم چطور؟ آغاز ممکن میباشد تصور کنید می توانید از کوئری XPath به کارگیری نمائید که به صورت معمول برای تبدیل پوشههای XML به کارگیری میگردد. نادرست میکنید. به دلایلی، یک لهجه پرس و جوی بار متفاوتی به اسم JSONPath وجود دارااست که در قبال از علامتگذاری نقطه به کار گیری مینماید. با اعتنا به برخی دلایل منطقی میباشد چون JSON تک تک خصوصیتهای XML را ندارد (اتربیوتها، فضای اسمها و غیره) ولی این نیز آزاردهنده میباشد که ناچار شویم دسته دیگری از نمادگذاریها را خاطر بگیریم.