Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 将字典中的值添加到对象';序列化为JSON时的属性_Asp.net Mvc_Json.net_Json - Fatal编程技术网

Asp.net mvc 将字典中的值添加到对象';序列化为JSON时的属性

Asp.net mvc 将字典中的值添加到对象';序列化为JSON时的属性,asp.net-mvc,json.net,json,Asp.net Mvc,Json.net,Json,我有这个型号 public class DTO { public int Id {get;set;} public string Name { get; set; } public string LastName { get; set; } public Dictionary<string, string> Items { get; set; } } 请注意,字典表示不能是数组,即将行转换为列。我已经尝试了很多使用JsonWriter和转换器的方法

我有这个型号

public class DTO
{
    public int Id {get;set;}
    public string Name { get; set; }
    public string LastName { get; set; }

    public Dictionary<string, string> Items { get; set; }
}

请注意,字典表示不能是数组,即将行转换为列。我已经尝试了很多使用JsonWriter和转换器的方法,但是没有达到这个效果。

您需要为
DTO
类创建一个转换器,而不是为它的
Items
属性创建一个转换器,因为您正在修改整个对象的表示

class DtoConverter : JsonConverter
{
    public override void WriteJson (JsonWriter writer, object value, JsonSerializer serializer)
    {
        var dto = (Dto)value;
        var jobj = JObject.FromObject(dto);
        foreach (var item in dto.Items)
            jobj[item.Key] = item.Value;
        jobj.WriteTo(writer);
    }

    public override object ReadJson (JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }

    public override bool CanConvert (Type objectType)
    {
        return typeof(Dto).IsAssignableFrom(objectType);
    }
}
用法(注意
JsonIgnoreAttribute
):

类程序
{
私有静态void Main()
{
var dto=新dto{
Id=1,Name=“Employee1”,LastName=“LastName1”,
条目=新字典{
{“变量1”,“值1在这里”},
{“变量2”,“值2在这里”},
{“变量3”,“值3在这里”},
}
};
WriteLine(JsonConvert.SerializeObject(dto,new DtoConverter());
Console.ReadKey();
}
}
类Dto
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共字符串LastName{get;set;}
[JsonIgnore]
公共字典项{get;set;}
}

谢谢您的回答,实际上返回的字符串不被视为json响应。。。它的字符串值看起来像“{\“Name\”:“Employee1\”,“LastName\”:“LastName1\”,“Variable 1\”:“value 1在这里”,“Variable 2\”:“value 2在这里”}如何将其作为Json从controller@Gerard由于您已经用
json.net
标记了这个问题,我希望您已经解决了这个问题。您需要将ASP.net MVC配置为使用json.net和提供的参数(具体来说,使用此转换器)。请参阅。如果您不担心内容类型是否正确,那么我想您可以像返回字符串一样返回结果(我不熟悉ASP.NET,因此不需要详细的说明)。
{"Id":1, "Name":"Employee1","LastName":"Last Name Value","Variable 1":"Value 1 Goes here","Variable 2":"Value 2 Goes here","Variable 3":"Value 3 Goes here"}
class DtoConverter : JsonConverter
{
    public override void WriteJson (JsonWriter writer, object value, JsonSerializer serializer)
    {
        var dto = (Dto)value;
        var jobj = JObject.FromObject(dto);
        foreach (var item in dto.Items)
            jobj[item.Key] = item.Value;
        jobj.WriteTo(writer);
    }

    public override object ReadJson (JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }

    public override bool CanConvert (Type objectType)
    {
        return typeof(Dto).IsAssignableFrom(objectType);
    }
}
class Program
{
    private static void Main ()
    {
        var dto = new Dto {
            Id = 1, Name = "Employee1", LastName = "LastName1",
            Items = new Dictionary<string, string> {
                { "Variable 1", "Value 1 Goes here" },
                { "Variable 2", "Value 2 Goes here" },
                { "Variable 3", "Value 3 Goes here" },
            }
        };
        Console.WriteLine(JsonConvert.SerializeObject(dto, new DtoConverter()));
        Console.ReadKey();
    }
}

class Dto
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string LastName { get; set; }

    [JsonIgnore]
    public Dictionary<string, string> Items { get; set; }
}