Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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
C#Json序列化列表_C#_.net_Json - Fatal编程技术网

C#Json序列化列表

C#Json序列化列表,c#,.net,json,C#,.net,Json,我对.Net Json序列化有点问题 我有一个带有字符串列表的类,我需要将其序列化为属性,例如: 原件: class: kid{ int age; String name; List[String] toys; } 结果: { "age":10, "name": Jane, "toys":["one", "two", "three"] } 我需要 { "age":10, "name": Jane, "toy_1": "one"

我对.Net Json序列化有点问题 我有一个带有字符串列表的类,我需要将其序列化为属性,例如:

原件:

class:
kid{
   int age;
   String name;
   List[String] toys;
}
结果:

{
    "age":10,
    "name": Jane,
    "toys":["one", "two", "three"]
}
我需要

{
    "age":10,
    "name": Jane,
    "toy_1": "one", 
    "toy_2": "two",
    "toy_3": "three"  
}

这是因为api。有什么方法可以做到这一点吗?

正如dcastro所说,这是一个奇怪的API,如果可以接受数组,您应该更改它。 如果您不能,您可以尝试创建和匿名类型,因此您将有如下内容:

public object GetSerializationObjectForKid(Kid kid)
{
    return new 
    {
        age = kid.age,
        name = kid.name,
        toy_1 = toys.ElementAtOrDefault(0), 
        toy_2 = toys.ElementAtOrDefault(1),
        toy_3 = toys.ElementAtOrDefault(2)
    }
}

然后可以序列化这个新的匿名对象。

下面是一个使用选择成员并为其命名以符合api要求的示例。它目前假设总有3个“玩具”


这里有一个动态解决方案,它不假设玩具的数量:

    public class kid
    {
        public int age;
        public String name;
        public List<String> toys;

        public string ApiCustomView
        {
            get
            {
                Dictionary<string, string> result = new Dictionary<string, string>();
                result.Add("age", age.ToString());
                result.Add("name", name);
                for (int ii = 0; ii < toys.Count; ii++)
                {
                    result.Add(string.Format("toy_{0}", ii), toys[ii]);
                }
                return result.ToJSON();
            }
        }
    }

我已经找到了解决方案…虽然不清楚,但它是有效的

                JObject data = JObject.Parse(JsonConvert.SerializeObject(exportAuc));

                int i = 0;
                foreach(String file in exportAuc.pdf_ostatni){
                    data.Add("pdf_ostatni_" + i.ToString(), file);
                    i++;
                }
                String output = data.ToString();

可以通过添加所需的属性来构建动态对象,然后将其序列化

dynamic jsonData = new System.Dynamic.ExpandoObject();
jsonData.age = kid.age;
jsonData.name = kid.name;
for (int i = 0; i < kid.toys.Count; i++)
        {
            ((IDictionary<String, Object>)jsonData).Add(string.Format("toy_{0}", i), kid.toys[i]);
        }
dynamic jsonData=new System.dynamic.ExpandoObject();
jsonData.age=kid.age;
jsonData.name=kid.name;
for(int i=0;i
这是一个奇怪的API。您可以使用匿名类型,它将允许您选择每个“玩具”作为新成员。玩具的数量总是一样的,还是可变的?然而它是可变的。你能看看这个吗?我认为保罗的答案更清楚。在这个回答中,您是否使用Json.NET或其他库来处理JObject和JsonConvert类?
    static void Main(string[] args)
    {
        var k = new kid { age = 23, name = "Paolo", toys = new List<string>() };
        k.toys.Add("Pippo");
        k.toys.Add("Pluto");

        Console.WriteLine(k.ApiCustomView);
        Console.ReadLine();
    }
namespace ExtensionMethods
{
    public static class JSONHelper
    {
        public static string ToJSON(this object obj)
        {
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            return serializer.Serialize(obj);
        }

        public static string ToJSON(this object obj, int recursionDepth)
        {
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            serializer.RecursionLimit = recursionDepth;
            return serializer.Serialize(obj);
        }
    }
}
                JObject data = JObject.Parse(JsonConvert.SerializeObject(exportAuc));

                int i = 0;
                foreach(String file in exportAuc.pdf_ostatni){
                    data.Add("pdf_ostatni_" + i.ToString(), file);
                    i++;
                }
                String output = data.ToString();
dynamic jsonData = new System.Dynamic.ExpandoObject();
jsonData.age = kid.age;
jsonData.name = kid.name;
for (int i = 0; i < kid.toys.Count; i++)
        {
            ((IDictionary<String, Object>)jsonData).Add(string.Format("toy_{0}", i), kid.toys[i]);
        }