Serialization 将数据序列化为JSON

Serialization 将数据序列化为JSON,serialization,Serialization,希望将此解决方案作为一个通用解决方案,其中GetJSON方法应该接受具有DataContract属性的通用类型,而不是Person对象。有人能解释一下怎么做吗 这是基本代码 namespace TestDataContractJsonSerializer { using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.IO;

希望将此解决方案作为一个通用解决方案,其中GetJSON方法应该接受具有DataContract属性的通用类型,而不是Person对象。有人能解释一下怎么做吗

这是基本代码

namespace TestDataContractJsonSerializer
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.IO;
using System.Runtime.Serialization.Json;

    public class Program
    {
        public static void Main(string[] args)
        {

            List<Person> persons = new List<Person> { new Person("Person1"), new Person("Person2") };

            var strJSON = from p in persons select GetJSON(p);
            Console.WriteLine("In JSON Format: ");

            foreach (string str in strJSON)
            {
                Console.WriteLine(" {0}", str); 
            }
            Console.ReadKey();
        }

        private static string GetJSON(Person p)
        {
            if (p != null)
            {
                MemoryStream stream = new MemoryStream();
                DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeof(Person));
                dataContractJsonSerializer.WriteObject(stream, p);
                stream.Position = 0;
                StreamReader sr = new StreamReader(stream);
                return sr.ReadToEnd();
            }

            return string.Empty;


        }
    }

    [DataContract]
    public class Person
    {

        public Person(string name)
        {
            this.Name = name;
        }
        [DataMember]
        public string Name { get; private set; }
    }
}
命名空间TestDataContractJsonSerializer
{
使用制度;
使用System.Collections.Generic;
使用System.Linq;
使用System.Runtime.Serialization;
使用System.IO;
使用System.Runtime.Serialization.Json;
公共课程
{
公共静态void Main(字符串[]args)
{
名单人员=新名单{新人员(“人员1”)、新人员(“人员2”)};
var strJSON=从p中选择GetJSON(p);
WriteLine(“JSON格式:”);
foreach(strJSON中的字符串str)
{
Console.WriteLine(“{0}”,str);
}
Console.ReadKey();
}
私有静态字符串GetJSON(Person p)
{
如果(p!=null)
{
MemoryStream stream=新的MemoryStream();
DataContractJsonSerializer DataContractJsonSerializer=新的DataContractJsonSerializer(typeof(Person));
dataContractJsonSerializer.WriteObject(流,p);
流位置=0;
StreamReader sr=新的StreamReader(流);
返回sr.ReadToEnd();
}
返回字符串。空;
}
}
[数据合同]
公共阶层人士
{
公众人物(字符串名称)
{
this.Name=Name;
}
[数据成员]
公共字符串名称{get;private set;}
}
}

在非常基本的情况下,它看起来像这样。您可能需要添加一些特殊的大小写和/或错误处理,例如,如果类型T不可序列化

    private static string GetJSON<T>(T objToSerialize)
    {
        if (objToSerialize != null)
        {
            MemoryStream stream = new MemoryStream();
            DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(objToSerialize.GetType());
            dataContractJsonSerializer.WriteObject(stream, objToSerialize);
            stream.Position = 0;
            StreamReader sr = new StreamReader(stream);
            return sr.ReadToEnd();
        }

        return string.Empty;


    }
私有静态字符串GetJSON(T objToSerialize)
{
if(objToSerialize!=null)
{
MemoryStream stream=新的MemoryStream();
DataContractJsonSerializer DataContractJsonSerializer=新的DataContractJsonSerializer(objToSerialize.GetType());
dataContractJsonSerializer.WriteObject(流,对象序列化);
流位置=0;
StreamReader sr=新的StreamReader(流);
返回sr.ReadToEnd();
}
返回字符串。空;
}

我没有给出泛型T,而是给出了object,但它开始抛出异常。但使用通用T,效果很好。非常感谢。你知道为什么用object代替T时会出现异常吗