C# 在json对象中创建json对象并将其返回到Ajax
我目前有一个c语言的C# 在json对象中创建json对象并将其返回到Ajax,c#,json,C#,Json,我目前有一个c语言的列表,结构如下: public class Translations { public string en { get; set; } public string de { get; set; } } 但我现在想将其转换为一个Json对象,因为我的函数通过Ajax调用此Web服务,需要的数据结构如下: { de: { //-> de stands for the stored value in translations class
列表
,结构如下:
public class Translations
{
public string en { get; set; }
public string de { get; set; }
}
但我现在想将其转换为一个Json对象,因为我的函数通过Ajax调用此Web服务,需要的数据结构如下:
{
de: { //-> de stands for the stored value in translations class
'en_GB': en, //-> en stand for stored value in translations class
'de_DE': de // -> de same value as the key de
},
de: {
'en_GB': en,
'de_DE': de
},
de: {
'en_GB': en,
'de_DE': de
},
...
}
我该怎么做?
我已经尝试用这个工具创建我需要的类:但这里的问题是我需要对象中每个对象的动态键名。使用此工具,它为每个对象创建一个静态对象
解决方案感谢Riaz Raza的帮助:
公共静态字符串getTranslations()
{
列表翻译=Connector.TranslationList();
int count=translations.count-1;
var translationsObject=新字典();
对于(int i=0;i您可以使用Dict类型的字典而不是类,并动态填充它以匹配所需的JSON对象
更新:
示例代码:
var dic = new Dictionary<string, object>();
dic.Add("de", new Dictionary<string, object>() { { "en_GB", "en" }, { "de_DE", "de" } });
var dic=newdictionary();
添加(“de”,新词典(){{“en_-GB”,“en”},{“de_-de”,“de”});
您可以使用类型为Dict
的字典而不是类,并动态填充它以匹配所需的JSON对象
更新:
示例代码:
var dic = new Dictionary<string, object>();
dic.Add("de", new Dictionary<string, object>() { { "en_GB", "en" }, { "de_DE", "de" } });
var dic=newdictionary();
添加(“de”,新词典(){{“en_-GB”,“en”},{“de_-de”,“de”});
我的建议是,如果您想在JSON中使用C#数据模型,您必须修改接收数据的JS函数,以便它接受来自C#模型的数据。这将是更准确的方法
但是,如果您无法访问JS代码或它受到修改限制,您可以使用Newtonsoft属性,这将允许您在从数据模型构建JSON文档时对其进行修改
以下是Newtonsoft的一些示例:
public class User
{
// always require a string value
[JsonProperty("name", Required = Required.Always)]
public string Name { get; set; }
// don't require any value
[JsonProperty("role", NullValueHandling = NullValueHandling.Ignore)]
public string Role { get; set; }
// property is ignored
[JsonIgnore]
public string Password { get; set; }
}
如果这不能解决您的问题,那么使用Regex等手动构建JSON字符串总是采用硬代码方式。但我建议将此作为最后一个选项,在大多数情况下,不使用硬代码也可以处理JSON
参考您的评论,即每个de:
都是uniq,最好将JSON文档组成数组
这将允许您将其反序列化为数组并对其进行迭代。我的建议是,如果您想在JSON中使用C#数据模型,您必须修改接收数据的JS函数,以便它接受来自C#模型的数据。这将是更准确的方法
但是,如果您无法访问JS代码或它受到修改限制,您可以使用Newtonsoft属性,这将允许您在从数据模型构建JSON文档时对其进行修改
以下是Newtonsoft的一些示例:
public class User
{
// always require a string value
[JsonProperty("name", Required = Required.Always)]
public string Name { get; set; }
// don't require any value
[JsonProperty("role", NullValueHandling = NullValueHandling.Ignore)]
public string Role { get; set; }
// property is ignored
[JsonIgnore]
public string Password { get; set; }
}
如果这不能解决您的问题,那么使用Regex等手动构建JSON字符串总是采用硬代码方式。但我建议将此作为最后一个选项,在大多数情况下,不使用硬代码也可以处理JSON
参考您的评论,即每个de:
都是uniq,最好将JSON文档组成数组
这将允许您将其反序列化为数组并对其进行迭代。如果您不希望修改现有的数据模型,我相信您可以使用(使用Newtonsoft Json)实现所需的功能。稍后我将尝试编写一个代码示例
也就是说,从您提供的示例来看,您似乎在不必要地复制数据,这几乎不是最好的选择。如果您不希望修改现有的数据模型,我相信您可以使用(使用Newtonsoft Json)实现所需的功能。稍后我将尝试编写一个代码示例
也就是说,从您提供的示例来看,您似乎在不必要地复制数据,这几乎不是最好的选择。“完全按照以下结构”您不能。这是无效的JSON(复制键)实际上,de:
是动态的。每个de
都有一个不同的值。因此没有重复的键。如果我没有解释清楚的话,很抱歉你的问题很难理解。许多JSON序列化程序会将IDictionary
转换为JSON中的动态命名值,但是,我不知道你想要的JSON如何映射到你的 翻译
类型定义。“完全使用以下结构”您不能。这是无效的JSON(重复键)实际上,de:
是动态的。每个de
都有一个不同的值。因此没有重复的键。如果我没有解释清楚的话,很抱歉你的问题很难理解。许多JSON序列化程序会将IDictionary
转换为JSON中的动态命名值,但是,我不知道你想要的JSON如何映射到你的JsonConvert.SerializedObject(dic)
仅适用于
而不适用于
现在起作用。用我的最终解决方案更新了我的问题。谢谢你的帮助!非常简单的解决方案谢谢你至少我现在在C中的Json对象的结构与我的Json对象相同,但不知何故JsonConvert.SerializedObject(dic)
仅适用于
现在不适用于
了。用我的最终解决方案更新了我的问题。感谢您的帮助!非常简单的解决方案