Jquery asmx返回没有对象名称的嵌套json
我有一个ASMXWebService,它调用一个方法来构建一个两级嵌套列表,每个组包含一个列表。json被用于通过knockout.js填充和编辑。当嵌套对象返回到jquery ajax调用时,嵌套对象(以及stingified json)不包含任何对象名称 我知道我错过了一些基本的东西,但我不知所措。。。而且花了两天都没有用 我期待着(请忽略逃跑): 但是我越来越Jquery asmx返回没有对象名称的嵌套json,jquery,ajax,json,knockout.js,asmx,Jquery,Ajax,Json,Knockout.js,Asmx,我有一个ASMXWebService,它调用一个方法来构建一个两级嵌套列表,每个组包含一个列表。json被用于通过knockout.js填充和编辑。当嵌套对象返回到jquery ajax调用时,嵌套对象(以及stingified json)不包含任何对象名称 我知道我错过了一些基本的东西,但我不知所措。。。而且花了两天都没有用 我期待着(请忽略逃跑): 但是我越来越 [{\"id\":1488,\"name\":\"Baby Books\",\"categories\":[{\"id\":152
[{\"id\":1488,\"name\":\"Baby Books\",\"categories\":[{\"id\":152,\"name\":\"Activity Books\",\"value\":\"Ignore\"}]}]
这些类别的定义如下:
public class Group
{
public int id;
public string name;
public List<GroupCategory> categories;
public Group(int id, string name)
{
this.id = id;
this.name = name;
this.categories = new List<GroupCategory>();
}
}
public class GroupCategory
{
public int id;
public string name;
public string value;
public GroupCategory(int id, string name)
{
this.id = id;
this.name = name;
this.value = CategoryValue.Ignore.ToString();
}
}
public enum CategoryValue
{
UseCategoryValue,
Ignore,
Included,
Excluded,
}
公共类组
{
公共int id;
公共字符串名称;
公开名单类别;
公共组(int-id,字符串名称)
{
this.id=id;
this.name=名称;
this.categories=新列表();
}
}
公共类组类别
{
公共int id;
公共字符串名称;
公共字符串值;
public GroupCategory(int-id,字符串名)
{
this.id=id;
this.name=名称;
this.value=CategoryValue.Ignore.ToString();
}
}
公共枚举类别值
{
UseContegoryValue,
忽视
包括,
排除,
}
asmx和构建方法包括:
[WebMethod]
public List<Group> GetIncludeExcludeJson()
{
var Groups = new List<Group>();
ShopAssistGroupHandler.getInExCategories(Groups);
return Groups;
}
[WebMethod]
公共列表GetIncludeExcludeJson()
{
变量组=新列表();
ShopAssistGroupHandler.getInExCategories(组);
返回组;
}
及
public static void getInExCategories(列表组,CategoryValue defaultValue=CategoryValue.UseCegoryValue)
{
var indexgroups=GroupCategoryHelper.GetGroups();
尝试
{
foreach(组中的GroupCategoryDictionary dGroup.Values)
{
var Group=新组(dGroup.ParentGroupCategory.CategoryID,dGroup.ParentGroupCategory.Name);
组。添加(组);
foreach(dGroup.Values中的变量groupCategory)
{
var category=新的GroupCategory(GroupCategory.CategoryID,GroupCategory.Name);
组.类别.添加(类别);
如果(defaultValue==CategoryValue.UseCategoryValue)
{
category.value=groupCategory.ExtensionData==null
? ""
:groupCategory.ExtensionData;
category.value=category.value==CategoryValue.Excluded.ToString()
?CategoryValue.Excluded.ToString()
:CategoryValue.Ignore.ToString();
}
其他的
{
category.value=defaultValue.ToString();
}
}
}
}
捕获(例外情况除外)
{
掷骰子;
}
}
谢谢你的帮助-感觉很傻;-}
雅培不确定我是否理解您的措辞,但为什么您希望输出中包含
\u type
成员?将C#对象序列化为JSON只会提供公共属性。(或者你是说它们是敲除或控件所必需的?)它们是敲除所必需的,因为它在对象列表条目上使用foreach。我有另一个简单的asmx测试项目,它返回类型信息。。。不同之处在于,该对象是用填充该对象的子常量声明的。我的矿山是动态建造的。那种\u类型的东西是为WCF方法生成的。尝试用WCF属性[DataContract]
和(或至少)[KnownType(typeof(ClassNameHere))]
来装饰它们,看看是否有效。以前从未尝试将WCF属性添加到非WCF对象,因此WebApi可能会忽略这些属性。如果做不到这一点,只需在每个类中添加您自己的\u type
属性即可。我尝试了在js中生成预期字符串和对象的方法。当我尝试对对象ko.applybindings抛出'group'时,它没有定义:我尝试了在js中生成预期字符串和对象的方法。当我尝试将ko.applybindings添加到对象时,它抛出的“group”未定义:
[WebMethod]
public List<Group> GetIncludeExcludeJson()
{
var Groups = new List<Group>();
ShopAssistGroupHandler.getInExCategories(Groups);
return Groups;
}
public static void getInExCategories(List<Group> Groups, CategoryValue defaultValue = CategoryValue.UseCategoryValue)
{
var inexGroups = GroupCategoryHelper.GetGroups();
try
{
foreach (GroupCategoryDictionary dGroup in inexGroups.Values)
{
var Group = new Group(dGroup.ParentGroupCategory.CategoryID, dGroup.ParentGroupCategory.Name);
Groups.Add(Group);
foreach (var groupCategory in dGroup.Values)
{
var category = new GroupCategory(groupCategory.CategoryID, groupCategory.Name);
Group.categories.Add(category);
if (defaultValue == CategoryValue.UseCategoryValue)
{
category.value = groupCategory.ExtensionData == null
? ""
: groupCategory.ExtensionData;
category.value = category.value == CategoryValue.Excluded.ToString()
? CategoryValue.Excluded.ToString()
: CategoryValue.Ignore.ToString();
}
else
{
category.value = defaultValue.ToString();
}
}
}
}
catch (Exception ex)
{
throw ex;
}
}