C# 从同一字符串中一个文件中的两个分支创建 Json 文件

C# Create Json file from two clases in one file in the same string

提问人:Oleg Buga 提问时间:11/12/2023 更新时间:11/13/2023 访问量:62

问:

你能帮帮我吗?我需要从两个不同的分支创建json 这是我所拥有的:

public class SmtpData
{
    public string id { get; set; }
    public string settingName { get; set; }
    public string host { get; set; }
    public int port { get; set; }
    public string username { get; set; }
    public string password { get; set; }
    public string senderName { get; set; }
    public string senderEmail { get; set; }
    public string senderMessageIdDomain { get; set; }
    public string senderReplyTo { get; set; }
    public string senderListUnsubscribe { get; set; }
    public bool isSecure { get; set; }
    public bool isUseProxy { get; set; }
    public class Proxy
    {
        public string proxyhost { get; set; }
        public int proxyport { get; set; }
        public string proxyusername { get; set; }
        public string proxypassword { get; set; }

    }

由此,我使用我的配置创建了一个 json 文件

        public void SaveSmtp(SmtpData data)
        {
            var dataJson = JsonConvert.SerializeObject(data);
            string resultPath = Path.Combine(Helpers.SmtpPath, $"{data.id}.conf");
            File.WriteAllText(resultPath, dataJson);
        }

我需要在此文件中进行配置,不仅来自 SmtpData,而且 SmtpData.Proxy 位于同一字符串中

这是我所拥有的: {“id”:“YXe1yCcNlc”,“settingName”:“AAAA”,“host”:“AAAA”,“port”:0,“username”:“AAAA”,“password”:“AAAA”,“senderName”:“AAAA”,“senderEmail”:“AAAA”,“senderMessageIdDomain”:“AAAA”,“senderReplyTo”:“AAAA”,“senderListUnsubscribe”:“AAAA”,“isSecure”:true,“isUseProxy”:false}

这是我需要的: {“id”:“YXe1yCcNlc”,“settingName”:“AAAA”,“host”:“AAAA”,“port”:0,“username”:“AAAA”,“password”:“AAAA”,“senderName”:“AAAA”,“senderEmail”:“AAAA”,“senderMessageIdDomain”:“AAAA”,“senderReplyTo”:“AAAA”,“senderListUnsubscribe”:“AAAA”,“isSecure”:true,“isUseProxy”:false,“proxyhost”:“AAAA”,“proxyport”:0,“proxyusername”:“AAAA”,“proxypassword”:“AAAA”}

非常感谢我的朋友们。

我已经阅读了很多常见问题解答和指南......但我没有找到任何解决方案......

C# JSON 配置 保存

评论

0赞 Fildor 11/12/2023
将类移出 并改为为其指定 Property 类型。ProxySmtpDataProxy

答:

0赞 Dmitry Ivanov 11/12/2023 #1

在这种情况下,您需要使用 Json 值更改结果字符串,将序列化插入 serialized 中。或者使用反射和 .SmtpData.ProxySmtpDataJObject

由于类不是类的一部分,因此如果添加属性:ProxySmtpDataProxy

{"id":"YXe1yCcNlc","settingName":"AAAA","host":"AAAA","port":0,"username":"AAAA","password":"AAAA","senderName":"AAAA","senderEmail":"AAAA","senderMessageIdDomain":"AAAA","senderReplyTo":"AAAA","senderListUnsubscribe":"AAAA","isSecure":true,"isUseProxy":false, "**proxy**":{ "proxyhost":"AAAA","proxyport":0,"proxyusername":"AAAA","proxypassword":"AAAA"}}
1赞 Morten Bork 11/13/2023 #2

你的类声明不整洁,这让你感到困惑。

public class SmtpData
    {
        public string id { get; set; }
        public string settingName { get; set; }
        public string host { get; set; }
        public int port { get; set; }
        public string username { get; set; }
        public string password { get; set; }
        public string senderName { get; set; }
        public string senderEmail { get; set; }
        public string senderMessageIdDomain { get; set; }
        public string senderReplyTo { get; set; }
        public string senderListUnsubscribe { get; set; }
        public bool isSecure { get; set; }
        public bool isUseProxy { get; set; }

        public Proxy proxy { get; set; }
        
    }

    public class Proxy
    {
        public string proxyhost { get; set; }
        public int proxyport { get; set; }
        public string proxyusername { get; set; }
        public string proxypassword { get; set; }

    }

这样定义您的类,并尝试再次反序列化。应该给你,你预期的结果。

评论

0赞 Oleg Buga 11/13/2023
谢谢。。。试试吧......但我在 Winform 上有一个错误,在代理文本框 System.NullReferenceException 中:
0赞 Morten Bork 11/13/2023
您是否设置了“代理”值?