gpt4 book ai didi

c# - JSON 将自定义 C# 结构序列化为字符串,而不是对象

转载 作者:行者123 更新时间:2023-11-30 20:55:28 25 4
gpt4 key购买 nike

我看过各种问题,但不确定如何实现。

我有一个自定义结构,目前没有公共(public)属性。当它通过 WebApi 返回时(不进行任何花哨的序列化,只返回自定义结构本身),它作为对象 {} 返回。

public struct CustomStruct
{
private string myProperty;

...

public override string ToString()
{
return this.myProperty;
}

...

}

自定义结构本身是父类属性的类型,序列化为:

{ "MyProp1":"value1","MyProp2":"value2","MyCustomStruct":{} }

当我在自定义结构上覆盖 ToString() 时,我想输出一个私有(private)属性。当将对象作为 JSON 对象返回到 JavaScript 领域时,我能否实现类似的行为?

例如我的私有(private)属性是一个字符串,名为“myProperty”,设置为“test”。如果我添加一个名为“MyProperty”的公共(public)属性,我将得到以下输出:

{ "MyProp1":"value1","MyProp2":"value2","MyCustomStruct":{ "MyProperty":"test" } }

当我真正想要的是:

{ "MyProp1":"value1","MyProp2":"value2","MyCustomStruct":"test" }

希望这是有道理的。

以下是对我帮助不大的相关问题。如果可能的话,我想避免使用 JSON.NET,但如果这是唯一的方法,我会这样做:

JSON.Net Struct Serialization Discrepancy

C# custom json serialization

JSON.NET with Custom Serializer to a custom object

JSON serialization of enum as string

JavaScriptSerializer.Deserialize - how to change field names

最佳答案

我遇到了同样的挑战。我通过编写一个在转换时使用对象 ToString 方法的自定义 JsonConverter 解决了这个问题:

public class ToStringConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteValue(value.ToString());
}

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

public override bool CanConvert(Type objectType)
{
return true;
}
}

然后像这样使用它作为 JsonConverter 属性:

[JsonConverter(typeof(ToStringConverter))]
public AnotherObjectWithToString MyObject { get; set; }

我应该注意,这只能用于序列化,因为反序列化需要将 ToString 结果转换回对象,并且这会因类型而异。

关于c# - JSON 将自定义 C# 结构序列化为字符串,而不是对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18277636/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com