I'm serializing a List of objects of a MediaInfo class I have created. When this comes out, I end up with:
Object:
ClassName: "WVO.Media",
Data: Array():
0:9
1: null
...
5: "A3000"
...
8: "Oakland
... etc...
In short, I'm getting the class property as an integer keyed array instead of with property names. Serialization code is pretty straight forward. First I load the list (List mediaInfos) and then call:
JsonConvert.SerializeObject(mediaInfos);
I can Response.Write things like:
Response.Write(mediaInfos[0].MediaTown);
... and get the correct output, but I'm confused as to why the property names aren't included in the JSon output. What am I missing?
EDIT:
using System;
using System.Data;
using System.Runtime.Serialization;
using System.Collections.Generic;
using CMS;
using CMS.DataEngine;
using CMS.Helpers;
using WVO;
[assembly: RegisterObjectType(typeof(MediaInfo), MediaInfo.OBJECT_TYPE)]
namespace WVO
{
[Serializable]
public class MediaInfo : AbstractInfo<MediaInfo>
{
#region "Type information"
public const string OBJECT_TYPE = "wvo.media";
public static ObjectTypeInfo TYPEINFO = new ObjectTypeInfo(typeof(MediaInfoProvider), OBJECT_TYPE, "WVO.Media", "MediaID", null, null, null, null, null, null, null, null)
{
ModuleName = "wvo",
TouchCacheDependencies = true,
DependsOn = new List<ObjectDependency>()
{
new ObjectDependency("MediaMarketID", "wvo.mediamarket", ObjectDependencyEnum.NotRequired),
new ObjectDependency("MediaStateID", "cms.state", ObjectDependencyEnum.NotRequired),
new ObjectDependency("MediaTypeID", "wvo.mediatype", ObjectDependencyEnum.NotRequired),
new ObjectDependency("MediaSizeID", "wvo.mediasize", ObjectDependencyEnum.NotRequired),
},
};
#endregion
#region "Properties"
[DatabaseField]
public virtual int MediaID
{
get
{
return ValidationHelper.GetInteger(GetValue("MediaID"), 0);
}
set
{
SetValue("MediaID", value);
}
}
[DatabaseField]
public virtual string MediaPanel
{
get
{
return ValidationHelper.GetString(GetValue("MediaPanel"), String.Empty);
}
set
{
SetValue("MediaPanel", value, String.Empty);
}
}
[DatabaseField]
public virtual string MediaTown
{
get
{
return ValidationHelper.GetString(GetValue("MediaTown"), String.Empty);
}
set
{
SetValue("MediaTown", value, String.Empty);
}
}
... [several other properties similarly formatted] ...
#endregion
#region "Type based properties and methods"
protected override void DeleteObject()
{
MediaInfoProvider.DeleteMediaInfo(this);
}
protected override void SetObject()
{
MediaInfoProvider.SetMediaInfo(this);
}
#endregion
#region "Constructors"
public MediaInfo(SerializationInfo info, StreamingContext context)
: base(info, context, TYPEINFO)
{
}
public MediaInfo()
: base(TYPEINFO)
{
}
public MediaInfo(DataRow dr)
: base(TYPEINFO, dr)
{
}
#endregion
}
}
Thanks!