C# 在json对象中创建json对象并将其返回到Ajax

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

我目前有一个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
        '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如何映射到你的 翻译type definition.@LukasR.在客户端上形成数据实际上不是一个好策略,如果你在客户端上进行解析和其他工作,会使你的网页变慢。因此我的建议是,你应该在服务器端以适当的格式形成数据。@LukasR.在客户端形成数据实际上不是一个好策略如果你要在客户端进行解析和其他工作,那么会使你的网页变慢。因此我建议你应该在服务器端以适当的格式生成数据。谢谢你,至少我现在在C#中的Json对象的结构与我的Json对象相同,但不知怎的,
JsonConvert.SerializedObject(dic)
仅适用于
而不适用于
现在起作用。用我的最终解决方案更新了我的问题。谢谢你的帮助!非常简单的解决方案谢谢你至少我现在在C中的Json对象的结构与我的Json对象相同,但不知何故
JsonConvert.SerializedObject(dic)
仅适用于
现在不适用于
了。用我的最终解决方案更新了我的问题。感谢您的帮助!非常简单的解决方案