كيفية بناء DataContractJsonSerialize وظيفة الراحة

StackOverflow https://stackoverflow.com/questions/401348

  •  03-07-2019
  •  | 
  •  

سؤال

ولدي رمز مشترك من تسلسل كائن فئة في بلدي 3-4 الأساليب، حتى وأنا أفكر في إنشاء وظيفة مشتركة لهذا الرمز والدعوة وظيفة في جميع الطرق

وأنا doingn هذا من التعليمات البرمجية التالية

DataContractJsonSerializer ser = new DataContractJsonSerializer(this.GetType());
                MemoryStream ms = new MemoryStream();
                ser.WriteObject(ms, this);

                json = Encoding.Default.GetString(ms.ToArray());

                ms.Close();

وأريد أن أضع هذا الرمز المشترك في الوظيفة العامة seprate التي ترجع سلسلة JSON والتي تقبل طلاب الصف كمعلمة إدخال وأنا تحويل فئة كاملة إلى كائن JSON، حاولت خلق وظيفة مثل

وسلسلة العامة GenerateJsonString (الدرجة C1)

ولكن هذا هو إعطائي خطأ على "الطبقة" الكلمة قائلا مطلوب هذا النوع

ويمكن لأحد أن يقول لي كيف يمكن أن أقبل كائن الفئة كله في طريقة seprate أو وظيفة

هل كانت مفيدة؟

المحلول

وأنت الخلط بين "الطبقة" مع "وجوه". إجراء تسلسل كائن، وهو مثيل لفئة معينة (ويعرف أيضا باسم "نوع").

ويمكنك إنشاء أسلوب أخذ معلمة من النوع الأساسي. NET لكافة الكائنات، "وجوه"، مثل هذا:

public static string GenerateJsonString(object o) 
{
    DataContractJsonSerializer ser = new DataContractJsonSerializer(o.GetType());
    using (MemoryStream ms = new MemoryStream())
    {
        ser.WriteObject(ms, o);
        json = Encoding.Default.GetString(ms.ToArray());
        ms.Close();
        return json;
    }
}

نصائح أخرى

واكتب المعلمة بأنها "كائن". لا يمكنك تمرير فئة كمعلمة، فقط مثيل فئة - التي في OOP يشار إليه بأنه "كائن"

public string GenerateJsonString(object obj)

وإذا كان كل الكائنات التي يتم تمريرها إلى هذا الأسلوب هي مثيلات الفئات التي تستمد من فئة أساسية مشتركة، ثم يمكنك استخدام تعدد الأشكال والكتابة على طريقة لقبول الأشياء التي هي مثيلات الفئة الأساسية. خلاف ذلك، وتستمد جميع الطبقات من System.Object.

وليس من الواضح ما تعنيه ب "كائن فئة". إذا كنت تقصد كائن، تمرير إشارة إلى كائن وكذلك وضعها الطبيعي تمرير "الكائن بأكمله" (وأيضا، إشارة إلى ذلك). يمكنك الحصول على جميع الأعضاء.

إذا كنت تريد تمرير <م> نوع نفسه، يجب أن تقوم بتعريف المعلمة ك <لأ href = "http://msdn.microsoft.com/en-us/library/system.type. ASPX "يختلط =" noreferrer نوفولو "> اكتب - ولكن أظن أن هذا ليس حقا ما تريد

إذا كنت تريد أن تكتب الطريقة التي سوف تقبل أي كائن، مجرد إعلان المعلمة كنوع <لأ href = "http://msdn.microsoft.com/en-us/library/system.object.aspx" يختلط = "نوفولو noreferrer"> كائن :

public string GenerateJsonString(object x)

وانا شخصيا لن تستخدم Encoding.Default (والذي هو محدد نظام) لتحويل ثنائي إلى نص، بالمناسبة - ما الترميز هو مسلسل باستخدام حقا؟ هل يسمح لك بالمرور في TextWriter (مثلا StringWriter) بدلا من تيار؟

ويمكنك قبول كائن. لا مثيل فئة وهناك للا يمكن تمريرها إلى الأسلوب.

وحاول استخدام اكتب بدلا من الدرجة

public string GenerateJsonString(Type t1)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top