Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon อะไรคือความแตกต่างระหว่างการใช้แอตทริบิวต์ที่ต้องการและ jsonrequiredattribute ใน mvvmcross


อะไรคือความแตกต่างระหว่างการใช้แอตทริบิวต์ที่ต้องการและ jsonrequiredattribute ใน mvvmcross


ใน MVVMCROSS เมื่อจัดการกับการตรวจสอบข้อมูลและการทำให้เป็นอนุกรมคุณลักษณะสองอย่างมักจะเข้ามาเล่น: `จำเป็น 'และ` jsonRequiredattribute' คุณลักษณะเหล่านี้มีวัตถุประสงค์ที่แตกต่างกันและใช้ในขั้นตอนต่าง ๆ ของวงจรชีวิตแอปพลิเคชัน

แอตทริบิวต์ที่ต้องการ

แอตทริบิวต์ `จำเป็น 'เป็นส่วนหนึ่งของ` system.componentmodel.dataannotations` namespace และใช้สำหรับการตรวจสอบแบบจำลอง มันบ่งชี้ว่าคุณสมบัติจะต้องมีค่า; มิฉะนั้นโมเดลจะถือว่าไม่ถูกต้อง โดยทั่วไปแล้วแอตทริบิวต์นี้จะใช้หลังจาก deserialization ในระหว่างขั้นตอนการตรวจสอบโมเดล ตัวอย่างเช่นใน ASP.NET Core หากคุณสมบัติได้รับการตกแต่งด้วย `[จำเป็น]` `` modelState 'จะไม่ถูกต้องหากคุณสมบัตินั้นหายไปหรือว่างระหว่างการผูกโมเดล

ใน MVVMCROSS ในขณะที่แอตทริบิวต์ `ต้องการ 'สามารถใช้สำหรับการตรวจสอบความถูกต้อง แต่ก็ไม่ได้โต้ตอบโดยตรงกับการทำให้เป็นอนุกรม JSON หรือกระบวนการ deserialization แต่เป็นเรื่องเกี่ยวกับการรับรองว่าคุณสมบัติบางอย่างจะมีการเติมก่อนดำเนินการกับตรรกะทางธุรกิจ

jsonRequiredTribute

`jsonrequiredattribute` นั้นมีความเฉพาะเจาะจงกับการทำให้เป็นอนุกรม JSON และ deserialization มันถูกใช้เพื่อระบุว่าคุณสมบัติจะต้องมีอยู่ในข้อมูล JSON ในระหว่างการ deserialization แอตทริบิวต์นี้มีความสำคัญเมื่อทำงานกับข้อมูล JSON เนื่องจากช่วยให้มั่นใจได้ว่าคุณสมบัติที่ต้องการมีอยู่เสมอป้องกันข้อผิดพลาดที่อาจเกิดขึ้นเนื่องจากข้อมูลที่ขาดหายไป

ใน MVVMCROSS เมื่อใช้ JSON สำหรับการนำทางหรือการถ่ายโอนข้อมูลระหว่างโมเดลมุมมอง `jsonRequiredattribute` จะช่วยให้มั่นใจได้ว่าคุณสมบัติที่ต้องการจะถูกทำให้เป็นอนุกรมและ deserialized อย่างถูกต้อง สิ่งนี้มีความสำคัญอย่างยิ่งเนื่องจาก MVVMcross ขึ้นอยู่กับ JSON อย่างมากสำหรับพารามิเตอร์ที่ซับซ้อนในระหว่างการนำทาง

ความแตกต่างที่สำคัญ

1. วัตถุประสงค์:
- `จำเป็นต้องใช้สำหรับการตรวจสอบแบบจำลองทั่วไปเพื่อให้มั่นใจว่าคุณสมบัติจะถูกเติมหลังจาก deserialization
- `jsonRequiredattribute` เป็นพิเศษสำหรับการรับรองคุณสมบัติมีอยู่ในระหว่าง JSON deserialization

2. ขั้นตอนการใช้งาน:
- `จำเป็นต้องใช้` ใช้ในระหว่างการตรวจสอบแบบจำลองหลังจาก deserialization
- `jsonRequiredattribute` ถูกใช้ในระหว่าง JSON deserialization

3. ขอบเขต:
- `จำเป็นต้องใช้ 'สามารถใช้ในรูปแบบข้อมูลและสถานการณ์การตรวจสอบต่างๆ
- `jsonrequiredattribute` ได้รับการปรับแต่งโดยเฉพาะสำหรับการจัดการข้อมูล JSON

4. พฤติกรรม:
- หากคุณสมบัติที่ทำเครื่องหมายด้วย `จำเป็นต้องหายไปมันจะส่งผลให้เกิดข้อผิดพลาดในการตรวจสอบความถูกต้องหลังจาก deserialization
- หากคุณสมบัติที่ทำเครื่องหมายด้วย `jsonrequiredattribute` จะหายไปในระหว่าง JSON deserialization โดยทั่วไปแล้วจะมีข้อยกเว้นหรือส่งผลให้เกิดข้อผิดพลาด deserialization

โดยสรุปในขณะที่แอตทริบิวต์ทั้งสองถูกใช้เพื่อให้แน่ใจว่ามีความสมบูรณ์ของข้อมูล `จำเป็นต้องมีการตรวจสอบความถูกต้องของแบบจำลองทั่วไปมากขึ้นในขณะที่` jsonrequiredattribute` จะเน้นไปที่การรับรองการแสดงข้อมูลในระหว่างการทำให้เป็นอนุกรม JSON และกระบวนการ deserialization ในแอปพลิเคชัน MVVMCROSS

การอ้างอิง:
[1] https://github.com/mvvmcross/nplus1daysofmvvmcross/blob/master/n-39-crosslight-touch/crosslighttouch/properties/annotations.cs
[2] https://www.mvvmcross.com/documentation/plugins/json
[3] https://stackoverflow.com/questions/49237767/using-required-and-jsonrequired-in-asp-net-core-model-binding-with-json-body
[4] https://learn.microsoft.com/en-us/dotnet/communitytoolkit/mvvm/generators/observableProperty
[5] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[6] https://www.strathweb.com/2017/12/required-and-bindrequired-in-asp-net-core-mvc/
[7] https://www.mvvmcross.com/documentation/platform/android/android-view-presenter
[8] https://www.mvvmcross.com/documentation/fundamentals/navigation
[9] https://learn.microsoft.com/en-us/dotnet/api/system.text.json.serialization.jsonrequiredattribute?view=net-9.0
[10] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[11] https://learn.microsoft.com/en-us/aspnet/core/mvc/models/validation?view=aspnetcore-9.0