繁体   English   中英

序列化没有属性名称的 JSON object 具有自定义 object 列表的 ZD7EFA19FBE7D29374FD5ADB60242

[英]Serialize a JSON object without property name having a list of custom object in C#

我有 model 如下:

public class CustomModel
    {        
        public string Data1 { get; set; }
        public string Data2 { get; set; }
    }

public class root
    {   
        public List<CustomModel> data { get; set; }
    }

我的有效载荷如下:

List<CustomModel> cms = new List<CustomModel>();

                CustomModel cm1 = new CustomModel();
                cm1.Data1 = "a";
                cm1.Data2 = "b";
                cms.Add(cm1);

                CustomModel cm2 = new CustomModel();
                cm2.Data1 = "D";
                cm2.Data2 = "E";
                cms.Add(cm2);

                BaseClass baseClass = new BaseClass();
                baseClass.data = cms;

我的 JSON 是:

var json = new JavaScriptSerializer().Serialize(baseClass);

结果是:

{"data":[{"data1":"a","data2":"b"},{"data1":"D","data2":"E"}]}

但我需要:没有“数据”属性如下:

{[{"data1":"a","data2":"b"},{"data1":"D","data2":"E"}]}

我尝试了以下 function:

public static IEnumerable<object> GetPropertyValues<T>(T input)
            {
                return input.GetType()
                    .GetProperties()
                    .Select(p => p.GetValue(input));
            }
            

喜欢

var value_only = GetPropertyValues(baseClass);
var json = new JavaScriptSerializer().Serialize(value_only);
BUT it returns [[{"data1":"a","data2":"b"},{"data1":"D","data2":"E"}]]

除了手动添加之外,还有其他方法吗? 请帮忙。

注意{[{"data1":"a","data2":"b"},{"data1":"D","data2":"E"}]}是无效的 json。 在 Json 对象中,数据/值由(命名的)属性组织。

However, here you seem to want a (root) Json object containing a value being Json array, but that value is not associated with a Json object property, thus not being valid Json.

If you really want invalid Json, i suggest you serialize the List<CustomModel> instance instead of the root model instance, resulting in a Json array, and then manually adding the surrounding { and } to the serialized Json string, thus giving you your desired无效的 Json 结果:

var json = new JavaScriptSerializer().Serialize(baseClass.data);
var desiredResult = "{" + json + "}";

您不需要根 class (或基本 class 您必须确定名称。只需使用

var json = new JavaScriptSerializer().Serialize(cms);

PS。

现在是时候使用现代串行器 select 了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM