Как десериализовать объект и получить значения элементов?
Используя приведенный ниже код,
HttpContext context.Response.ContentType = "application/json"; var data = context.Request; var sr = new StreamReader(data.InputStream); var stream = sr.ReadToEnd(); var javaScriptSerializer = new System.Web.Script.Serialization.JavaScriptSerializer(); var obj = javaScriptSerializer.DeserializeObject(stream); object[] arr = (object[])obj;
Результат работы Арр получен. В районе 3-уровневый объект Array. Например, ниже показано на панели часов:
Name Value Type arr[2] {object[3] object{object[]} [0] {object[2] object{object[]} [1] {object[2] object{object[]} [2] {object[2] object{object[]} [0] "6512" object{string} [1] "In Invert" object{string}
Я попытался получить значения элементов, например arr[2][2][2], но потерпел неудачу.
Затем из непосредственного окна я извлек arr[2] (см. ниже).
arr[2].GetType() {Name = "Object[]" FullName = "System.Object[]"} [System.RuntimeType]: {Name = "Object[]" FullName = "System.Object[]"} base {System.Reflection.MemberInfo}: {Name = "Object[]" FullName = "System.Object[]"} Assembly: {mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089} AssemblyQualifiedName: "System.Object[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" Attributes: Public | Sealed | Serializable BaseType: {Name = "Array" FullName = "System.Array"} ContainsGenericParameters: false DeclaringMethod: 'obj.GetType().DeclaringMethod' threw an exception of type 'System.InvalidOperationException' DeclaringType: null FullName: "System.Object[]" GenericParameterAttributes: 'obj.GetType().GenericParameterAttributes' threw an exception of type 'System.InvalidOperationException' GenericParameterPosition: 'obj.GetType().GenericParameterPosition' threw an exception of type 'System.InvalidOperationException' GenericTypeArguments: {System.Type[0]} GUID: {00000000-0000-0000-0000-000000000000} HasElementType: true IsAbstract: false IsAnsiClass: true IsArray: true IsAutoClass: false IsAutoLayout: true IsByRef: false IsClass: true IsCOMObject: false IsConstructedGenericType: false IsContextful: false IsEnum: false IsExplicitLayout: false IsGenericParameter: false IsGenericType: false IsGenericTypeDefinition: false IsImport: false IsInterface: false IsLayoutSequential: false IsMarshalByRef: false IsNested: false IsNestedAssembly: false IsNestedFamANDAssem: false IsNestedFamily: false IsNestedFamORAssem: false IsNestedPrivate: false IsNestedPublic: false IsNotPublic: false IsPointer: false IsPrimitive: false IsPublic: true IsSealed: true IsSecurityCritical: false IsSecuritySafeCritical: false IsSecurityTransparent: true IsSerializable: true IsSpecialName: false IsUnicodeClass: false IsValueType: false IsVisible: true MemberType: TypeInfo Module: {CommonLanguageRuntimeLibrary} Namespace: "System" ReflectedType: null StructLayoutAttribute: null TypeHandle: {System.RuntimeTypeHandle} TypeInitializer: null UnderlyingSystemType: {Name = "Object[]" FullName = "System.Object[]"}
Поскольку его свойство IsEnm является ложным, Я не знаю, как я могу получить подобъекты: arr[2][0] и arr[2][1].
Я не знаю, есть ли способ преобразовать object[] в object, чтобы я мог получить вложенные объекты.
Надеюсь, кто-то сможет помочь в этом вопросе. Спасибо.
Что я уже пробовал:
Как десериализовать объект и получить значения элементов?
F-ES Sitecore
Десериализовать где? В коде .net? В JavaScript? Вы гуглили "c# deserialise object" и следили за многими статьями и учебниками?
s yu
Я сделал это успешно для 2-го уровня ( Уровень 1: object{object []}, Уровень 2: object{string} Object array from string (имя переменной: stream, см. выше). Теперь мне нужно сделать это на 3-м уровне. Мне нужно десерилизировать Уровень 1: object{object[]} в Уровень 2: object{object[]}. Тогда я должен быть в состоянии дополнительно десерилизировать Уровень 2: object{object[]} до уровня 3 object{string}. Я застрял на десерилизации объекта{object[]} в объект другого уровня{object[]}. Спасибо за Ваш отзыв.
[no name]
Другим ответом было бы прочитать ответы, которые вы уже получили.